Test AngularJS factory function with Jasmine

前端 未结 1 1771
無奈伤痛
無奈伤痛 2021-01-31 21:32

I am very new to this (angularjs, jasmine, testacular) and I have this code (I simplified it a bit, leaving only what matters):

//my_module.js
angular.module(\'m         


        
1条回答
  •  说谎
    说谎 (楼主)
    2021-01-31 21:57

    You're not too far from what you need. First off, as you require my_data as my_module dependency, you don't need to inject my_module to the controller, just the factory (my_factory);

    Secondly, you want to make use of ngMock. The docs are not very complete, but give a good insight. More here and a example here (look for test/unit/controllers).

    Basically, what you want to do is to mock the service so you can be assured it has been called. To achieve it, inject $provide to your angular.mock.module call and provide a mocked my_factory service. The best way to achieve it is something like this:

    describe('testing my_controller.my_function', function () {
      var mockedFactory, $rootScope, $controller;
    
      beforeEach(module('my_module', function($provide) {
        mockedFactory = {
          save: jasmine.createSpy()
        };
    
        $provide.value('my_factory', mockedFactory);
      }));
    
      beforeEach(inject(function(_$rootScope_, _$controller_) {
        $rootScope = _$rootScope_;
        $controller = _$controller_;
      }));
    
      scope = $rootScope.$new();
    
      it('should call the save function', function() {
        scope.my_function();
        expect(mockedFactory.save).toHaveBeenCalled();
      });
    }
    

    This way you'll override my_factory dependency.

    0 讨论(0)
提交回复
热议问题