gpt4 book ai didi

使用 Jasmine 和 RequireJs 进行 AngularJs 单元测试

转载 作者:行者123 更新时间:2023-12-02 03:45:34 24 4
gpt4 key购买 nike

我无法使用 Jasmine 和 RequireJs 对 Angular JS 应用进行单元测试。我创建了一个 Plunker here

我遇到的问题是关于模块的创建。如果我在我的 Controller 中包含 Angular 模块的设置,就像这样(请参阅 Plunker 中的 Controller.js):

angular.module('catalogManagementApp', []);

然后一切正常。但是,这个模块是在另一个文件中创建的,所以这是行不通的。因此,如果我尝试使用 Angular Mocks 模块函数在我的测试中设置模块,我会收到一条错误消息“No module: catalogManagementApp”。

如果您查看 ControllerTests.js 文件,这是有道理的,因为 RequireJS 在我调用 Angular Mocks 以创建模块之前加载 Controller :

beforeEach(module('catalogManagementApp'));

但是,我不确定如何让它工作。正如您从 ControllerTests.js 文件中注释掉的代码中看到的那样,我尝试将 Controller 的 require 调用移动到调用设置模块之后,但这会导致 Jasmine 测试运行器失败并且仍然没有模块错误.

使用 RequireJs 代码运行 Jasmine 改编自 this

最佳答案

我有很多问题变得棱 Angular 分明、 mock 和需要与 jasmine 相处融洽。最后答案很明显,您需要启动 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>

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

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