控制器知道服务模拟,但单元测试不知道';t(AngularJS,Karma Jasmine)

控制器知道服务模拟,但单元测试不知道';t(AngularJS,Karma Jasmine),angularjs,unit-testing,jasmine,karma-jasmine,Angularjs,Unit Testing,Jasmine,Karma Jasmine,我将单元测试添加到AngularJS应用程序中,遇到了一个问题,我正在测试的控制器知道我的模拟(记录正确的模拟对象),但我的单元测试无法返回模拟值。这件事我已经讨论了一段时间了 模拟服务 angular.module('mocks.myService', []) .factory('myService', function() { var service = { hi : 'hi' }; return service; }); 控制器

我将单元测试添加到AngularJS应用程序中,遇到了一个问题,我正在测试的控制器知道我的模拟(记录正确的模拟对象),但我的单元测试无法返回模拟值。这件事我已经讨论了一段时间了

模拟服务

angular.module('mocks.myService', [])
  .factory('myService', function() {
      var service = {
        hi : 'hi'
      };
      return service;
  });
控制器

.controller('MyCtrl', ['myService', function(myService) {
  var vm = this;

  vm.doThing = function() {
    console.log(myService);
    // Object{hi:'hi'}
  };

}]);
单元测试

describe('myApp.selection module', function() {
    var myCtrl, myService;

    beforeEach(function() {
      myService = module('mocks.myService');
      console.log(myService);
      // undefined
    });

    describe('controller', function(){
      it('should exist', inject(function($controller) {
         myCtrl = $controller('MyCtrl');
         expect(myCtrl).toBeDefined();
      }));

      it ('should do thing', function() {
         myCtrl.doThing();
      });

   });

});
试试这个:

describe('myApp.selection module', function () {
 var myCtrl, myService;

 beforeEach(module("mocks.myService"));

 beforeEach(inject(function (_myService_) {
     myService = _myService_;
     console.log(myService);
 }));

 describe('controller', function () {
     it('should exist', inject(function ($controller) {
         myCtrl = $controller('MyCtrl');
         expect(myCtrl).toBeDefined();
     }));

     it('should do thing', function () {
         myCtrl.doThing();
     });

 });

});
资料来源: