2017-05-03 2 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(); 
    }); 
}); 

Ich möchte mit anderen Mock Response im nächsten it Block testen. Wie kann ich einen neuen Wert in mockCalendar Variable zuweisen, bevor der zweite it Block ausgeführt wird?AngularJS Jasmine - Test mit verschiedenen Mock Response im nächsten 'it' Block

+0

können nicht Sie haben eine andere gerade haben 'describe' statt' Es '.. Auf diese Weise können verschiedene' before angeben 'drin für beide und auch andere Mock-Daten haben – tanmay

+0

@tanmay gibt es keine andere Möglichkeit ??? – Aswathy

+0

Denke nicht. Sie können Ihr 'beforeEach' jedoch in eine Funktion einfügen, die' mockCalender' als Parameter akzeptiert und es erneut verwendet, um Code-Duplizierung zu vermeiden. – tanmay

Antwort

1

In Ihrem Szenario, das nicht ungewöhnlich ist, erstelle ich normalerweise eine Funktion mit Code, die in allen meinen Tests üblich ist, und rufe dann von Ihrem Test, nach zusätzliche Vereinbarungen, die nicht ausgeführt werden können die beforeEach. Beachten Sie, dass dies anders ist als die Verwendung der beforeEach, da Sie vor dem Aufruf der Funktion noch Änderungen vornehmen müssen.

Zum Beispiel würde der Code wie der folgende sein werden geändert:

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(); 
    }); 
}); 
Verwandte Themen