Karma Jasmine角度错误:[$injector:nomod]
Karma Jasmine Angular Error: [$injector:nomod]
简短版本:当我运行karma时,angular告诉我它不能注入我的"公共"模块。实际错误为:
Error: [$injector:nomod] http://errors.angularjs.org/1.5.5/$injector/nomod?p0=common
详细信息如下:
我的因果报应测试.js
"use strict";
describe('Testing ModuleToTest',function(){
beforeEach(module('ModuleToTest'));
var $scope = {};
var factory = {...make up stuff...}
// inject - access angular controller
beforeEach(inject([
'$controller','$rootScope',
function($ctrl,$rs){
$scope = $rs.$new();
$ctrl('ModuleToTestCtrl',{
$scope:$scope,
CommonFactory:factory
});
}]));
it('should define a someStuff object',function(){
expect(testScope.someStuff).toBeDefined();
});
});
我的ModuleToTest定义:
module.js文件:
angular.module('ModuleToTest',[]);
controller.js文件:
angular.module('ModuleToTest')
.controller('ModuleToTestCtrl',
['$scope','$http','CommonFactory',
function($scope,factory){
$scope.someStuff = ['foo','bar'];
}]);
定义CommonFactory:的模块
module.js文件:
angular.module('common',[]);
CommonFactory.js
angular.module('common')
.factory('CommonFactory',['$http',function($http){
// do factory stuff here
}]);
应用程序模块定义,app.js:
angular.module('MyMainApp',['ModuleToTest', ... , 'common']);
karma.config.js:
// frameworks to use
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
frameworks: ['jasmine'],//'requirejs'],
// list of files / patterns to load in the browser
files: [
{pattern: 'js/vendor/angular/*.js'},
{pattern: 'js/common/*.js'},
{pattern: 'moduleToTest/js/*.js'},
{pattern: 'moduleToTest/*.html'},
{pattern: 'js/*.js'},
{pattern: 'index.html'},
{pattern: 'test/test.js'}
],
// list of files to exclude
exclude: [
'js/vendor/bootstrap*.js',
'js/vendor/jquery*.js'
],
快速警告:MyMainApp按照我的预期工作。我刚刚开始使用Karma为我的应用程序模块构建单元测试。最终,我将为MyMainApp构建单元测试,但我尝试从小处着手。
除了答案之外,欢迎任何建议或澄清!非常感谢。
UPDATE:在得到有用的回复后(顺便说一句,谢谢!)简而言之,我也收到了同样的错误,但我已经尽力简化了问题。
我从ModuleToTest中删除了任何提及"common"的内容。而因果报应仍然在抱怨"普通"。详细信息如下:
我的因果报应测试.js
"use strict";
describe('Testing ModuleToTest',function(){
var testScope = {};
beforeEach(function(){
module('ModuleToTest');
inject(function($rootScope,$controller){
testScope = $rootScope.$new();
$controller('ModuleToTestCtrl',{
$scope: testScope
});
});
});
// No it statement for now because the module won't even load
});
我的ModuleToTest定义:
module.js文件(注意没有引用CommonFactory):
angular.module('ModuleToTest',[]);
controller.js文件(注意删除CommonFactory):
angular.module('ModuleToTest')
.controller('ModuleToTestCtrl',
['$scope',function($scope){
$scope.someStuff = ['foo','bar'];
}]);
答案:给定简化版本,解决方案是将angular mocks.js放在karma.conf.js文件中的angular.min.js之后。
我希望这能省去别人的麻烦。
您应该将"common"作为"ModuleToTest"的依赖项,因为这是使用其组件的地方,即
angular.module('ModuleToTest', ['common']);
对于您的测试,您实际上应该创建一个模拟CommonFactory
,以实现完全的合作者隔离。
describe('Testing ModuleToTest', function() {
var testScope, CommonFactory;
beforeEach(function() {
CommonFactory = {}; // or whatever mock implementation you need
module('ModuleToTest');
inject(function($rootScope, $controller) {
testScope = $rootScope.$new();
$controller('ModuleToTestCtrl', {
$scope: testScope,
CommonFactory: CommonFactory
});
});
})
// specs go here
});
相关文章:
- 错误:$injector:modulerr模块错误(我的第一个SPA应用程序)
- Angular $injector:unpr with uibModal
- 错误:$injector:modulerr加载图像时模块处于角度
- Karma Jasmine角度错误:[$injector:nomod]
- 为什么我得到错误:$injector:unp未知提供程序
- 何时在AngularJS中使用$injector
- 未捕获错误:由于,[$injector:moduler]未能实例化模块polmgr
- AngularJS-未捕获错误:[$injector:nomod]
- $injector:nomod模块“应用程序”不可用!仅限火狐浏览器
- 由于以下原因,无法实例化模块 myApp:错误:[$injector:nomod] http://errors.angu
- 错误: [$injector:nomod] 尝试将第三方模块添加到表示应用程序时
- Angular JS 错误: [$injector:nomod] 模块 'portfolioMockupApp.
- 未捕获的错误:[$injector:nomod] 和未捕获的错误:[$injector:模块rr]
- 简单的AngularJS示例(错误:[$injector:nomod],错误:[$sinjector:modulerr]
- 角度/因果报应:错误:[$injector:nomod]模块'模块'不可用
- AngularJS Error: [$injector:nomod]
- 错误:[$injector:nomod] Module 'nvd3'不可用
- 实例化demoApp模块失败,原因:错误:[$injector:nomod] module 'demoApp
- Angular JS错误:$injector:nomod Module在路由过程中不可用
- `[$injector:nomod] Module 'google-maps' is not avail