我无法使用Jasmine和RequireJs为Angular JS应用程序进行单元测试。我创建了一个Plunker here
我遇到的问题是创建模块。如果我在控制器中包含Angular模块的设置,就像这样(参见Plunker中的Controller.js):
angular.module('catalogManagementApp', []);
然后一切正常。但是,此模块是在另一个文件中创建的,因此不起作用。因此,如果我尝试使用Angular Mocks模块功能在我的测试中设置模块,我会收到一条错误,上面写着"没有模块:catalogManagementApp"。
如果查看ControllerTests.js文件,这是有道理的,因为在我调用Angular Mocks创建模块之前,RequireJS正在加载Controller:
beforeEach(module('catalogManagementApp'));
但是,我不知道如何让这个工作。正如您在ControllerTests.js文件中注释掉的代码中所看到的,我已经尝试在调用设置模块之后将Controller的require调用移动到,但是这会导致Jasmine测试运行器失败并且仍然相同没有模块错误
使用RequireJs代码运行Jasmine改编自this
答案 0 :(得分:1)
我有很多问题变得棱角分明,嘲笑并需要与茉莉花玩得很好。最后答案很明显,你需要启动jasmine并确保它提供了你的规格。这是我所做的简化版本,我希望它能让你走上正确的道路。
/* this would be 'main'*/
require.config({
paths: {
'jasmine-boot': 'lib/jasmine/boot',
'jashtml': 'lib/jasmine/jasmine-html',
'jasmine': 'lib/jasmine/jasmine',
'angular': 'lib/angular',
'angular-mocks': 'lib/angular-mocks',
'app': 'src/app',
'test': 'spec/first.spec',
},
shim: {
'jashtml': {
deps: ['jasmine']
},
'jasmine-boot': {
deps: ['jasmine', 'jashtml']
},
'angular': {
exports: "angular"
},
'angular-mocks': {
exports: "angular.mock",
deps: ['angular']
},
'test': {
deps: ['angular-mocks']
}
}
});
require(['jasmine-boot'], function () {
require(['test'], function () {
//trigger Jasmine
window.onload();
});
});
/*this would be 'first.spec'*/
define(['app'], function (app) {
var mockScope, controller;
function init() {
return angular.mock.inject(function ($injector, _$rootScope_, _$controller_) {
mockScope = _$rootScope_.$new();
controller = _$controller_('testCtrl', {
$scope: mockScope
});
});
};
describe('expect require', function () {
beforeEach(module("app"));
beforeEach(init());
describe('to be ', function() {
it('clever', function () {
var foo = "bar";
controller.setValue(foo);
expect(controller.value).toBe(foo);
});
});
});
});
/*jasmine spec runner*/
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Jasmine Spec Runner v2.1.3</title>
<link rel="shortcut icon" type="image/png" href="jasmine_favicon.png">
<link rel="stylesheet" href="jasmine.css">
<script src="../../require.js" data-main="main.js"></script>
</head>
<body>
</body>
</html>