gpt4 book ai didi

javascript - Karma Jasmine Angular 错误 : [$injector:nomod]

转载 作者:行者123 更新时间:2023-11-30 16:06:10 25 4
gpt4 key购买 nike

简短版本:当我运行 karma 时,angular 告诉我它不能注入(inject)我的“通用”模块。实际错误是:

Error: [$injector:nomod] http://errors.angularjs.org/1.5.5/$injector/nomod?p0=common

详情如下:

我的 karma test.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 构建单元测试,但我试图从小处着手。

除了答案之外,欢迎任何建议或澄清!谢谢!

更新:经过有用的回复(顺便谢谢你!)简而言之,我遇到了同样的错误,但我试图简化问题。

我从我的 ModuleToTest 中删除了任何提及“常见”的内容。而 karma 还在提示“普通”。详情如下:

我的 karma 测试.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放在angular.min.js之后< em>karma.conf.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
});

关于javascript - Karma Jasmine Angular 错误 : [$injector:nomod],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37015647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com