AngularJS+;Jasmine单元测试错误:[$injector:moduler]
我正在使用angular和jasmine进行单元测试。运行测试时,我遇到以下错误: 结果消息:错误:[$injector:moduler] $injector/moduler 单元测试AngularJS+;Jasmine单元测试错误:[$injector:moduler],angularjs,unit-testing,jasmine,Angularjs,Unit Testing,Jasmine,我正在使用angular和jasmine进行单元测试。运行测试时,我遇到以下错误: 结果消息:错误:[$injector:moduler] $injector/moduler 单元测试 /// <reference path="../Scripts/_references.js" /> /// <reference path="jasmine.js" /> /// <reference path="SampleController.js" /> descri
/// <reference path="../Scripts/_references.js" />
/// <reference path="jasmine.js" />
/// <reference path="SampleController.js" />
describe('Controller Unit Test: ', function () {
var scope, ctrl, $timeout;
var someServiceMock;
beforeEach(function () {
module('app');
});
beforeEach(function () {
someServiceMock = jasmine.createSpyObj('someService', ['someAsyncCall']);
inject(function ($rootScope, $controller, $q, _$timeout_) {
scope = $rootScope.$new();
someServiceMock.someAsyncCall.andReturn($q.when('weee'));
$timeout = _$timeout_;
ctrl = $controller('SampleController', {
$scope: scope,
someService: someServiceMock
});
});
});
it('Controller exists', function () {
expect(ctrl).toBeDefined();
});
});
最后,我的参考文件:
/// <reference path="angular.min.js" />
/// <reference path="angular-mocks.js" />
/// <reference path="angular-animate.min.js" />
/// <reference path="angular-sanitize.min.js" />
/// <reference path="angular-route.min.js" />
/// <reference path="jquery-2.1.1.min.js" />
/// <reference path="jquery.unobtrusive-ajax.js" />
/// <reference path="jquery.unobtrusive-ajax.min.js" />
/// <reference path="jquery.validate.min.js" />
/// <reference path="ui-bootstrap-tpls-0.14.3.min.js" />
/// <reference path="modernizr-2.8.3.js" />
//
///
///
///
///
///
///
///
///
///
///
在测试和运行调试模式下,当我在注入函数中设置断点时,它不会进入该模式。尝试这样修改您的测试代码,我还随意修改了您的结构,这样您的测试可能会更有效率。对于较小的控制器/测试,这并不重要,但对于更复杂的功能,为测试集重置的功能使这变得更容易 每个之前的第一个
将$injector
注入函数,您可以使用该函数获取引用。这可以在主description
功能中完成,因为它们可能不会改变
每个
之前的第二个我嵌套在一个新的描述
函数中。然后,您可以创建一组批测试,其中每个it
都保证有一个新的/新的控制器实例
如果$injector
为空或未定义,则表示脚本未加载或加载顺序错误。为了更好地解决这一问题,您需要了解注入失败的原因,因为Angular还没有意识到这一点,在这种情况下,请像您在文章顶部开始的那样,用完整的消息/url进行评论,然后我们可以按正确的顺序放置引用
控制器文件
/// <reference path="jquery-2.1.1.min.js" />
/// <reference path="angular.min.js" />
... rest of your code
/// <chutzpah_reference path="angular.min.js"/>
/// <chutzpah_reference path="angular-mocks.js"/>
// you might need additional chutzpah_reference but it really depends on your chutzpah configuration found in chutzpah.json
/// <reference path="jquery-2.1.1.min.js" />
/// <reference path="angular.min.js" />
/// <reference path="angular-mocks.js" />
/// <reference path="jasmine.js" />
/// <reference path="SampleController.js" />
describe('Controller Unit Test: ', function () {
var $rootScope; //, $timeout;
var someServiceMock;
beforeEach(function () {
angular.mock.module("app"); // mock your module
});
// setup
beforeEach(inject(function ($injector) {
someServiceMock = jasmine.createSpyObj('someService', ['someAsyncCall']);
someServiceMock.someAsyncCall.andReturn($q.when('weee'));
var $rootScope = $injector.get("$rootScope");
// $timeout = $injector.get("$timeout"); // not used anywhere that I can see
}));
describe('this will executes initial some set of tests on your controller', () => {
var scope;
var ctrl;
beforeEach(inject(function ($controller) {
scope = $rootScope.$new();
ctrl = $controller('SampleController', {
$scope: scope,
someService: someServiceMock});
}));
it('Controller exists', function () {
expect(scope).toBeDefined();
expect(ctrl).toBeDefined();
});
});
});
//
///
... 代码的其余部分
单元测试文件
/// <reference path="jquery-2.1.1.min.js" />
/// <reference path="angular.min.js" />
... rest of your code
/// <chutzpah_reference path="angular.min.js"/>
/// <chutzpah_reference path="angular-mocks.js"/>
// you might need additional chutzpah_reference but it really depends on your chutzpah configuration found in chutzpah.json
/// <reference path="jquery-2.1.1.min.js" />
/// <reference path="angular.min.js" />
/// <reference path="angular-mocks.js" />
/// <reference path="jasmine.js" />
/// <reference path="SampleController.js" />
describe('Controller Unit Test: ', function () {
var $rootScope; //, $timeout;
var someServiceMock;
beforeEach(function () {
angular.mock.module("app"); // mock your module
});
// setup
beforeEach(inject(function ($injector) {
someServiceMock = jasmine.createSpyObj('someService', ['someAsyncCall']);
someServiceMock.someAsyncCall.andReturn($q.when('weee'));
var $rootScope = $injector.get("$rootScope");
// $timeout = $injector.get("$timeout"); // not used anywhere that I can see
}));
describe('this will executes initial some set of tests on your controller', () => {
var scope;
var ctrl;
beforeEach(inject(function ($controller) {
scope = $rootScope.$new();
ctrl = $controller('SampleController', {
$scope: scope,
someService: someServiceMock});
}));
it('Controller exists', function () {
expect(scope).toBeDefined();
expect(ctrl).toBeDefined();
});
});
});
//
///
//您可能需要额外的chutzpah_引用,但这实际上取决于chutzpah.json中的chutzpah配置
///
///
///
///
///
描述('控制器单元测试:',功能(){
变量$rootScope;//,$timeout;
var-someServiceMock;
beforeach(函数(){
angular.mock.module(“app”);//模拟您的模块
});
//设置
每次之前(注入(函数($injector){
someServiceMock=jasmine.createSpyObj('someService',['someAsyncCall']);
someServiceMock.someAsyncCall.andReturn($q.when('weee'));
var$rootScope=$injector.get($rootScope”);
//$timeout=$injector.get($timeout);//在我能看到的任何地方都不使用
}));
description('这将在您的控制器上执行一些初始测试集',()=>{
var范围;
var-ctrl;
每次之前(注入(函数($controller){
scope=$rootScope.$new();
ctrl=$controller('SampleController'{
$scope:scope,
someService:someServiceMock});
}));
它('控制器存在',函数(){
expect(scope.toBeDefined();
expect(ctrl).toBeDefined();
});
});
});
编辑1
更改了引用。添加了角度模拟调用。尝试这样修改您的测试代码,我还随意修改了您的结构,这样您的测试可能会更有效率。对于较小的控制器/测试,这并不重要,但对于更复杂的功能,为测试集重置的功能使这变得更容易
每个
之前的第一个将$injector
注入函数,您可以使用该函数获取引用。这可以在主description
功能中完成,因为它们可能不会改变
每个
之前的第二个我嵌套在一个新的描述
函数中。然后,您可以创建一组批测试,其中每个it
都保证有一个新的/新的控制器实例
如果$injector
为空或未定义,则表示脚本未加载或加载顺序错误。为了更好地解决这一问题,您需要了解注入失败的原因,因为Angular还没有意识到这一点,在这种情况下,请像您在文章顶部开始的那样,用完整的消息/url进行评论,然后我们可以按正确的顺序放置引用
控制器文件
/// <reference path="jquery-2.1.1.min.js" />
/// <reference path="angular.min.js" />
... rest of your code
/// <chutzpah_reference path="angular.min.js"/>
/// <chutzpah_reference path="angular-mocks.js"/>
// you might need additional chutzpah_reference but it really depends on your chutzpah configuration found in chutzpah.json
/// <reference path="jquery-2.1.1.min.js" />
/// <reference path="angular.min.js" />
/// <reference path="angular-mocks.js" />
/// <reference path="jasmine.js" />
/// <reference path="SampleController.js" />
describe('Controller Unit Test: ', function () {
var $rootScope; //, $timeout;
var someServiceMock;
beforeEach(function () {
angular.mock.module("app"); // mock your module
});
// setup
beforeEach(inject(function ($injector) {
someServiceMock = jasmine.createSpyObj('someService', ['someAsyncCall']);
someServiceMock.someAsyncCall.andReturn($q.when('weee'));
var $rootScope = $injector.get("$rootScope");
// $timeout = $injector.get("$timeout"); // not used anywhere that I can see
}));
describe('this will executes initial some set of tests on your controller', () => {
var scope;
var ctrl;
beforeEach(inject(function ($controller) {
scope = $rootScope.$new();
ctrl = $controller('SampleController', {
$scope: scope,
someService: someServiceMock});
}));
it('Controller exists', function () {
expect(scope).toBeDefined();
expect(ctrl).toBeDefined();
});
});
});
//
///
... 代码的其余部分
单元测试文件
/// <reference path="jquery-2.1.1.min.js" />
/// <reference path="angular.min.js" />
... rest of your code
/// <chutzpah_reference path="angular.min.js"/>
/// <chutzpah_reference path="angular-mocks.js"/>
// you might need additional chutzpah_reference but it really depends on your chutzpah configuration found in chutzpah.json
/// <reference path="jquery-2.1.1.min.js" />
/// <reference path="angular.min.js" />
/// <reference path="angular-mocks.js" />
/// <reference path="jasmine.js" />
/// <reference path="SampleController.js" />
describe('Controller Unit Test: ', function () {
var $rootScope; //, $timeout;
var someServiceMock;
beforeEach(function () {
angular.mock.module("app"); // mock your module
});
// setup
beforeEach(inject(function ($injector) {
someServiceMock = jasmine.createSpyObj('someService', ['someAsyncCall']);
someServiceMock.someAsyncCall.andReturn($q.when('weee'));
var $rootScope = $injector.get("$rootScope");
// $timeout = $injector.get("$timeout"); // not used anywhere that I can see
}));
describe('this will executes initial some set of tests on your controller', () => {
var scope;
var ctrl;
beforeEach(inject(function ($controller) {
scope = $rootScope.$new();
ctrl = $controller('SampleController', {
$scope: scope,
someService: someServiceMock});
}));
it('Controller exists', function () {
expect(scope).toBeDefined();
expect(ctrl).toBeDefined();
});
});
});
//
///
//您可能需要额外的chutzpah_引用,但这实际上取决于chutzpah.json中的chutzpah配置
///
///
///
///
///
描述('控制器单元测试:',功能(){
变量$rootScope;//,$timeout;
var-someServiceMock;
beforeach(函数(){
angular.mock.module(“app”);//模拟您的模块
});
//设置
每次之前(注入(函数($injector){
someServiceMock=jasmine.createSpyObj('someService',['someAsyncCall']);
someServiceMock.someAsyncCall.andReturn($q.when('weee'));
var$rootScope=$injector.get($rootScope”);
//$timeout=$injector.get($timeout);//在我能看到的任何地方都不使用
}));
description('这将在您的控制器上执行一些初始测试集',()=>{
var范围;
var-ctrl;
每次之前(注入(函数($controller){
scope=$rootScope.$new();
ctrl=$controller('SampleController'{
$scope:scope,
someService:someServiceMock});
}));
它('控制器存在',函数(){
expect(scope.toBeDefined();
expect(ctrl).toBeDefined();
});
});
});
编辑1
更改了引用。添加了角度模拟调用。在顶部单元测试文件的引用列表中,没有对控制器文件的引用。顺序也很重要,请确保它是引用的最后一个文件。对不起,它在那里,但我把它拔出来是为了尝试。我还是会犯同样的错误你没有推荐人