gpt4 book ai didi

使用 Jasmine 进行 AngularJS Controller 单元测试

转载 作者:行者123 更新时间:2023-12-02 22:28:06 24 4
gpt4 key购买 nike

我正在使用 Jasmine 对 Angular Controller 进行单元测试,但无法通过错误

“类型错误:无法读取未定义的属性‘正在运行’”。

完整的错误发布在底部。

这是应用程序定义...

var myApp= myApp|| angular.module('myApp', ['ngRoute', 'ngSanitize', 'ui.bootstrap']);

myApp.run(['$http', '$rootScope', 'properties', function($http, $rootScope, properties) {
//...
//Implementation of custom dependency
properties.get().then(function(response) {
$rootScope.propertiesLoaded = true;
myApp.properties = response;
});
//...
}]);

Controller ..

myApp.controller('myController', function($scope, users) {
//...
});

test.js

describe("Test Controllers", function () {
beforeEach(function () {
angular.module("myApp");

//Injection of mocked custom dependency into the myApp.run method
myApp.run(function ($provide) {
$provide.provider('properties', function () {
this.$get = function () {
return "Mock return"
};
});
});
});

describe("myController", function () {
var scope, usrs, createMainController, mockDependency;

beforeEach(function () {
mockDependency = {
current: {
get: function () {
return "Mock return";
}
}
};

angular.module(function ($provide) {
$provide.value('users', mockDependency);
},[]);

inject(function (_$injector_, _$controller_, _$rootScope_, users) {
scope = _$rootScope_.$new();
usrs = _$injector_.get("users");

_$controller_("myController", {
$scope: scope,
users: usrs
});

createMainController = function () {
return _$controller_("myController", {
$scope: scope,
users: usrs
});
};
});

});

describe("This simple test", function () {
it("should pass no matter what", function () {
expect(true).toBe(true);
});
});
});
});

这是完整的错误消息...

TypeError: Cannot read property 'running' of undefined
at isSpecRunning (file:///C:/.../angular-mocks.js:1923:73)
at window.inject.angular.mock.inject (file:///C:/.../angular-mocks.js:2087:20)
下一行指向注入(inject)函数
at Object.<anonymous> (file:///C:/.../mySpec.js:37:13)
at attemptSync (file:///C:/.../jasmine.js:1510:12)
at QueueRunner.run (file:///C:/.../jasmine.js:1498:9)
at QueueRunner.execute (file:///C:/.../jasmine.js:1485:10)
at Spec.Env.queueRunnerFactory (file:///C:/.../jasmine.js:518:35)
at Spec.execute (file:///C:/.../jasmine.js:306:10)
at Object.<anonymous> (file:///C:/.../jasmine.js:1708:37)
at attemptAsync (file:///C:/.../jasmine.js:1520:12)

这是我发现的错误的相关引用,表明这是 Jasmine 现有的问题。然而,在本例中,问题涉及 Mocha,我没有使用它。 https://github.com/angular/angular.js/issues/1467

最佳答案

我不确定这是否对您有帮助,但您可以尝试一下,我也遇到过这个问题。我不太擅长 AngularJS,所以如果这不起作用,我不知道该告诉你什么。在 angular-mocks.js 中找到函数 isSpecRunning 并将其更改为:

function isSpecRunning() {
//return currentSpec && (window.mocha || currentSpec.queue.running);
return !!currentSpec;
}

我读到了一些关于 Jasmine 2.0 的内容(不确定这是否是您所关注的内容),除非您有这行代码,否则不会有任何行为。

他们在新版本的 angular-mocks.js 中使用上述逻辑解决了这个问题(1.3.15 节)。

关于使用 Jasmine 进行 AngularJS Controller 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24270389/

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