Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
模拟AngularJS模块以传递给另一个模块_Angularjs_Unit Testing_Karma Jasmine - Fatal编程技术网

模拟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”不可用,应(重新)定义:

这种方法的问题是,即使定义了它,它也会被覆盖到测试运行的末尾。如果real
accountModule
需要在其他测试中使用,则这是不可能的

类似设计问题的适当解决方案(这也适用于测试中不需要的依赖项,例如路由器模块)是


这里,
serviceapp
作为
serviceapp.internal
的浅包装,后者可以安全地进行测试。如果
serviceapp
是用于引导的顶级模块,这表明应用程序模块化不够,这会影响测试。

Ahhh我明白了!非常感谢您对此提供了一些(非常好的)见解!我会给它一个目标,注意$provide.value是多余的。对象参数也可以做同样的事情。