Angularjs 模块A的模拟服务通过模块C提供给模块B 介绍

Angularjs 模块A的模拟服务通过模块C提供给模块B 介绍,angularjs,unit-testing,karma-jasmine,Angularjs,Unit Testing,Karma Jasmine,myApp模块是应用程序的主要模块,它依赖于myApp.Services和myApp.Controllers模块 myApp.Controllers与myApp.Services模块没有直接依赖关系,但是myApp.Services模块中的fooSrvc可注射到myApp.Controllers模块中的FooCtrl 好吧,不管怎么说,这是可行的,我可以理所当然地接受它,尽管我不知道如何 但是,把它带到单元测试的层面,即FooCtrl。我需要模拟fooSrvc。好吧,我可以模拟一下: befor

myApp
模块是应用程序的主要模块,它依赖于
myApp.Services
myApp.Controllers
模块

myApp.Controllers
myApp.Services
模块没有直接依赖关系,但是
myApp.Services
模块中的
fooSrvc
可注射到
myApp.Controllers
模块中的
FooCtrl

好吧,不管怎么说,这是可行的,我可以理所当然地接受它,尽管我不知道如何

但是,把它带到单元测试的层面,即
FooCtrl
。我需要模拟
fooSrvc
。好吧,我可以模拟一下:

beforeEach(function() {
  module('myApp.Controllers');

  module(function($provide) {
    $provide.service('fooSrvc', function() {
      // Mocking fooSrvc
    });
  });
});
问题:
我是否应该模拟任何模块,并且该模块组织是否因为模块
myApp.Controllers
myApp.Services
之间的魔法依赖性而不好?

您肯定应该将
myApp.Services
添加为
myApp.Controllers
的依赖项。就单元测试而言,我总是会创建协作者的mock/stub/spies(例如
fooSrvc
),它工作的唯一原因是因为您的主应用程序引入了所有必需的模块。单独来看,您的
myapp.Controllers
模块有一个未满足的依赖项。您是对的,我不得不模拟
myapp.Services
。在回答中总结:)您应该明确地将
myapp.Services
添加为
myapp.Controllers
的依赖项。就单元测试而言,我总是会创建协作者的mock/stub/spies(例如
fooSrvc
),它工作的唯一原因是因为您的主应用程序引入了所有必需的模块。单独来看,您的
myapp.Controllers
模块有一个未满足的依赖项。您是对的,我不得不模拟
myapp.Services
。用答案来概括:)
beforeEach(function() {
  module('myApp.Controllers');

  module(function($provide) {
    $provide.service('fooSrvc', function() {
      // Mocking fooSrvc
    });
  });
});