2017-05-03 8 views
1
describe('test mock', function() { 

    var resource, employeeRoles, provider, mockBaseUrl, mockUser, mockOffices, mockCalendar, $window, $httpBackend, $scope, $serializer; 

    beforeEach(angular.mock.module('appointmentManager')); 

    beforeEach(inject(function ($injector, $rootScope, $httpParamSerializer) { 


     mockCalendar = { 
    // sample data 
      }; 


     $window = $injector.get('$window'); 
     $window.ApiBaseUrl = mockBaseUrl; 
     $window.LoggedInUser = mockUser; 

     $httpBackend = $injector.get('$httpBackend'); 
     $httpBackend.expectPOST('api/Calendar/GetCalendar').respond(200, mockCalendar); 


     $scope.$apply(); 

     $httpBackend.flush(); 
    })); 

    it('should be defined in module', function() { 
     expect(resource).toBeDefined(); 
     expect(provider).toBeDefined(); 
    }); 

    it('active employees should be true', function() { 
     expect(provider.isNoActiveEmployeesAvailable).toBe(false); 

     //test with another mockCalendar data 
    }); 

    afterEach(function() { 
     $scope.$destroy(); 
     $httpBackend.verifyNoOutstandingExpectation(); 
     $httpBackend.verifyNoOutstandingRequest(); 
    }); 
}); 

次のitブロックで異なる模擬応答でテストしたいと思う。ここで、変数に新しい値を代入するにはどうすればよいですか?itブロックが実行されますか?AngularJSジャスミン - 次の 'それ'ブロックで異なる模擬応答でテストする

+0

は、あなただけの代わりに、 'it'の別の' describe'を持つことはできませんあなたが 'beforeEachを異なる指定することができます。..そのように'それの両方のための内部と別の模擬データを持っている – tanmay

+0

@ tanmay他の方法はありません??? – Aswathy

+0

そうは思わない。あなたは 'beforeEach'を' mockCalender'を受け入れる関数にラップして、コードの重複を避けるために再利用することができます。 – tanmay

答えて

1

あなたのシナリオでは一般的ではありませんが、私は通常、すべてのテストで共通するコードを持つ関数を作成し、の後にbeforeEach。これは、beforeEachを使用する場合とは異なります。これは、関数を呼び出す前に何かを変更できる必要があるためです。

例えば、あなたのコードは、次のようなものに変更することになります。

describe('test mock', function() { 

    var resource, employeeRoles, provider, mockBaseUrl, mockUser, mockOffices, mockCalendar, $window, $httpBackend, $scope, $serializer; 

    var setupTest = function(mockCalendar) { 
     $httpBackend.expectPOST('api/Calendar/GetCalendar').respond(200, mockCalendar); 
     $scope.$apply(); 
     $httpBackend.flush(); 
    }; 

    beforeEach(angular.mock.module('appointmentManager')); 

    beforeEach(inject(function ($injector, $rootScope, $httpParamSerializer) { 
     mockCalendar = { 
      // sample data 
     }; 

     $window = $injector.get('$window'); 
     $window.ApiBaseUrl = mockBaseUrl; 
     $window.LoggedInUser = mockUser; 

     $httpBackend = $injector.get('$httpBackend'); 
    })); 

    it('should be defined in module', function() { 
     setupTest(mockCalendar); // not sure if this is needed here. 
     expect(resource).toBeDefined(); 
     expect(provider).toBeDefined(); 
    }); 

    it('should set provider.isNoActiveEmployeesAvailable to false when xxx', function() { 
     mockCalendar.someField = 'some value'; 
     setupTest(mockCalendar); 
     expect(provider.isNoActiveEmployeesAvailable).toBe(false); 
    }); 

    it('should do something else', function() { 
     mockCalendar.someField = 'some other value'; 
     setupTest(mockCalendar); 
     expect(provider.isNoActiveEmployeesAvailable).toBe(true); 
    }); 

    afterEach(function() { 
     $scope.$destroy(); 
     $httpBackend.verifyNoOutstandingExpectation(); 
     $httpBackend.verifyNoOutstandingRequest(); 
    }); 
}); 
関連する問題