gpt4 book ai didi

javascript - 使用 Jasmine 在 Karma 中进行 AngularJS 工厂测试

转载 作者:数据小太阳 更新时间:2023-10-29 05:08:02 25 4
gpt4 key购买 nike

我正在尝试通过 Karma 使用 Jasmine 测试我的 AngularJS 应用程序。我收到此错误(至少,这是最新的错误):

Uncaught TypeError: Cannot read property '$modules' of null
at /Users/benturner/Dropbox/Code/galapagus/app/static/js/angular-mocks.js:1866

来 self 的 karma.conf.js:

files: [
'static/js/jquery.min.js',
'static/js/angular.min.js',
'static/js/angular-mocks.js',
'static/js/angular-resource.min.js',
'static/js/angular-scenario.js',
'static/js/angular-loader.min.js',
'static/js/momentous/ctrl_main.js', // contains all my app's code
'test/momentous.js'
],

这是我的测试:

(function () {
"use strict";

var controller = null;
var scope = null;

describe("Services", inject(function($rootScope, Moments) {
var mockedFactory, moments, flag, spy;
moments = [{name: 'test'}];

beforeEach(module('momentous', function($provide) {
scope = $rootScope.$new();

$provide.value('$rootScope', scope);

mockedFactory = {
getList: function() {
return moments;
}
};
spy = jasmine.createSpy(mockedFactory.getList);

$provide.value('Moments', mockedFactory);
}));

it('should return moments from the factory service', function() {
runs(function() {
console.log(scope.getList);
flag = false;
setTimeout(function() {
scope.getList();
flag = true;
}, 500);
});

waitsFor(function() {
return flag;
}, "The call is done", 750);

runs(function() {
expect(scope.moments).toEqual([{name: 'test'}]);
expect(spy).toHaveBeenCalled();
});
});
}));

}());

所以我想做的是模拟我的工厂服务并检查它是否返回一个对象数组并将它们设置为 $scope 中的一个变量。

那里也有一个异步调用,所以我不得不使用 runs() 和 waitsFor()。

我仍然不明白我是如何注入(inject)我的 $scope 以便我可以对其进行测试的,并且现在 angular-mocks.js 给我一个错误我觉得我离解决这个问题越来越远,而不是更近了.

这是我从各种文档、指南和 stackoverflow 答案中拼凑出来的。任何指导?谢谢。

最佳答案

我也遇到了这个确切的错误。我的代码与我尝试测试提供程序的地方类似,因此我调用模块并将其传递给配置提供程序的函数。

已解决:

我发现问题是由于调用“inject”将委托(delegate)返回给“describe”方法。您只能使用 inject 将委托(delegate)返回给“它”。

例如:

describe('something', inject(function(something) {}));  // will throw the $module is null error

但这会起作用:

it('something', inject(function(something) {}));  // works :)

关于javascript - 使用 Jasmine 在 Karma 中进行 AngularJS 工厂测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18977425/

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