模拟AngularJS模块以传递给另一个模块
我在模拟属于我的一个模块的工厂时遇到了一些问题。我要模拟的工厂有两个依赖项: 工厂级:模拟AngularJS模块以传递给另一个模块,angularjs,unit-testing,karma-jasmine,Angularjs,Unit Testing,Karma Jasmine,我在模拟属于我的一个模块的工厂时遇到了一些问题。我要模拟的工厂有两个依赖项: 工厂级: angular.module('serviceapp') .factory('claims.service', ['applicationSettings', 'localStorageService', function (applicationSettings, localStorageService) { //Factory code here }]); //Instantiate some
angular.module('serviceapp')
.factory('claims.service', ['applicationSettings', 'localStorageService', function (applicationSettings, localStorageService) {
//Factory code here
}]);
//Instantiate some values
var mockAppSettings = {};
var mockStorageService = {};
var $factory; //Will hold my factory
//Targeting my module for mocking
beforeEach(angular.mock.module('serviceapp'));
//Providing some values for the dependencies of my module
beforeEach(module('serviceapp', function ($provide) {
$provide.value('applicationSettings', mockAppSettings);
$provide.value('localStorageService', mockStorageService);
}));
//Problems start here
beforeEach(inject(function ($injector) {
$factory = $injector.get('claims.service');
}));
angular.module('serviceapp', [accountModule])
测试类:
angular.module('serviceapp')
.factory('claims.service', ['applicationSettings', 'localStorageService', function (applicationSettings, localStorageService) {
//Factory code here
}]);
//Instantiate some values
var mockAppSettings = {};
var mockStorageService = {};
var $factory; //Will hold my factory
//Targeting my module for mocking
beforeEach(angular.mock.module('serviceapp'));
//Providing some values for the dependencies of my module
beforeEach(module('serviceapp', function ($provide) {
$provide.value('applicationSettings', mockAppSettings);
$provide.value('localStorageService', mockStorageService);
}));
//Problems start here
beforeEach(inject(function ($injector) {
$factory = $injector.get('claims.service');
}));
angular.module('serviceapp', [accountModule])
我收到一条错误消息
未能实例化模块serviceapp,原因是:
无法实例化模块accountModule,原因是:
模块“accountModule”不可用代码>
调查时,我看到accountModule
被列为serviceApp
模块的依赖项
应用程序模块类:
angular.module('serviceapp')
.factory('claims.service', ['applicationSettings', 'localStorageService', function (applicationSettings, localStorageService) {
//Factory code here
}]);
//Instantiate some values
var mockAppSettings = {};
var mockStorageService = {};
var $factory; //Will hold my factory
//Targeting my module for mocking
beforeEach(angular.mock.module('serviceapp'));
//Providing some values for the dependencies of my module
beforeEach(module('serviceapp', function ($provide) {
$provide.value('applicationSettings', mockAppSettings);
$provide.value('localStorageService', mockStorageService);
}));
//Problems start here
beforeEach(inject(function ($injector) {
$factory = $injector.get('claims.service');
}));
angular.module('serviceapp', [accountModule])
但是,我在模拟此模块以传递给serviceapp时遇到一些问题。我尝试了模拟accountModule的方法,与我在开始时模拟serviceapp的方法相同,但是仍然会显示相同的错误消息。如何模拟并将一个模块传递给另一个模块?angular.mock.module('serviceapp')
不应逐字阅读。它不会模拟模块。它与module('serviceapp')
相同,用于模块化环境,其中module
是保留的
那么,所有这些
beforeEach(angular.mock.module('serviceapp'));
beforeEach(module('serviceapp', ...));
does正在加载serviceapp
两次(没有伤害,但也没有帮助)
为避免模块“accountModule”不可用代码>,应(重新)定义:
这种方法的问题是,即使定义了它,它也会被覆盖到测试运行的末尾。如果realaccountModule
需要在其他测试中使用,则这是不可能的
类似设计问题的适当解决方案(这也适用于测试中不需要的依赖项,例如路由器模块)是
这里,serviceapp
作为serviceapp.internal
的浅包装,后者可以安全地进行测试。如果serviceapp
是用于引导的顶级模块,这表明应用程序模块化不够,这会影响测试。Ahhh我明白了!非常感谢您对此提供了一些(非常好的)见解!我会给它一个目标,注意$provide.value是多余的。对象参数也可以做同样的事情。