AngularJS Jasmine 测试失败:无法实例化模块
Posted
技术标签:
【中文标题】AngularJS Jasmine 测试失败:无法实例化模块【英文标题】:AngularJS Jasmine Test Fails: Failed to instantiate module 【发布时间】:2014-03-07 23:25:28 【问题描述】:我的 Angular 应用运行良好,我的测试也运行良好,使用 karma 和 jasmine,直到我在 ui.bootstrap
中添加了一个依赖项。现在该应用程序仍按预期工作,但我无法运行我的测试。这就是我所拥有的:
app.js - 在 ui.bootstrap
中添加了依赖项angular.module('myApp', ['ngResource', 'ngRoute', 'ui.bootstrap']).config(function(...) ...);
service.js
angular.module('myApp').service('myService', function () )
controller.js
angular.module('myApp').controller('MyController', function ($scope, $http, myService) )
tests/main.js
describe('Controller: MyController', function ()
var MyController, scope;
// load the controller's module
beforeEach(function()
module('myApp');
inject(function ($controller, $rootScope)
scope = $rootScope.$new();
MyController = $controller('MyController',
$scope:scope
);
);
);
it('should do something', function ()
expect(scope.myOptions.length).toBe(5);
);
);
我使用 grunt 和 krama 运行的测试失败,原因是:
Error: [$injector:modulerr] Failed to instantiate module myApp due to:
Error: [$injector:modulerr] Failed to instantiate module ui.bootstrap due to:
Error: [$injector:nomod] Module 'ui.bootstrap' is not available! You either misspelled the module name or forgot
我错过了什么?应用程序运行没有问题,只有测试失败。
【问题讨论】:
请检查您的 karam.conf.js 文件是否包含 bootstrap-ui js 文件。 是的,就是这样。错过了那里的 karma.conf.js。谢谢! 我刚才也遇到了同样的问题,但我想知道如果它是一个单元测试,为什么我应该加载所有模块并且应该隔离那段特定的代码?除非我误解了,否则感觉就像您必须加载更像是集成测试的所有内容? 【参考方案1】:在karma.conf.js
中有一个 karma 在测试执行之前加载的文件列表:
// list of files / patterns to load in the browser
files: [
'bower_components/angular/angular.js',
'bower_components/angular-mocks/angular-mocks.js',
...
]
在此处添加 bootstrap-ui.js。
【讨论】:
问题仍然显示为未回答,因为它仅在 cmets 中得到回答。所以我再次添加它作为“真正的答案” 问题:你不需要做这样的事情吗?module('myApp', ['ngResource', 'ngRoute', 'ui.bootstrap'])
在测试中引用并实例化模块?【参考方案2】:
注入你的依赖项
beforeEach(function()
angular.module('ui.bootstrap',[]);
);
【讨论】:
【参考方案3】:我遇到了同样的问题。刚刚解决了。不知何故将module(myApp);
函数调用放在你提供给beforeEach()
的函数中是行不通的,试试这个:
将模块调用提取到它自己的 beforeEach() 中:
beforeEach(module('myApp'));
并为您使用的函数使用另一个 beforeEach()。
【讨论】:
以上是关于AngularJS Jasmine 测试失败:无法实例化模块的主要内容,如果未能解决你的问题,请参考以下文章
在 Jasmine 单元测试中模拟 AngularJS 模块依赖项
基于karma和jasmine的Angularjs 单元测试
在Visual Studio 2013中使用Jasmine + Karma进行AngularJS测试
Chutzpah - 使用 jasmine 和 TypeScript 进行 AngularJS 测试