在jasmine描述函数中,自动向beforeEach和afterEach添加代码
Automatically adding code to beforeEach and afterEach in jasmine describe function
目前我有以下代码,它将设置一个sinon服务器并做一些其他事情,FakeServer是一个AMD模块,我可以将其导入到我的测试中。它有一个create()和destroy()方法:
describe('do something', function() {
var server;
beforeEach(function() {
server = FakeServer.create();
setupRoutes();
});
afterEach( function(){
FakeServer.destroy(server);
});
我真正想要的是自动将这个逻辑添加到beforeEach和afterEach函数中(以防止用户忘记添加afterEah语句)。
类似这样的东西:
describe('do something', function() {
var server = FakeServer.init(this);
如何自动设置beforeEach和afterEach函数来调用fake_server create()和destraw()函数?
fake_server.js
define(function(require) {
require('sinon.server');
"use strict";
function create() {
$.ajaxSetup({
async: false
});
var server = sinon.fakeServer.create();
server.autoRespond = true;
return server;
}
function destroy(server) {
server.restore();
$.ajaxSetup({
async: true
});
}
return {
create : create,
destroy : destroy
}
});
以下是我的想法。我相信它有效,但我没有和你一样的设置。我正在发布我的解决方案,其中包含了运行该解决方案所需的修改。我希望它能让你走上正轨。
因此,基本上,在fake_serverinit调用中,我会优先考虑beforeEach和afterEach的实现,以调用服务器代码,然后调用原始函数来调用它们。这将处理测试文件中是否有额外的beforeEach或afterEach设置。
我无法从init函数返回服务器,因为它直到beforeEach被实际调用才初始化,但这可以改为。我向FakeServer添加了一个helper函数来获取服务器。
fake_server.js
var FakeServer = (function () {
//require('sinon.server');
"use strict";
var myServer;
function create() {
$.ajaxSetup({
async: false
});
var server = {}; //sinon.fakeServer.create();
server.autoRespond = true;
return server;
}
function destroy(server) {
//server.restore();
$.ajaxSetup({
async: true
});
}
function init(describeFunc) {
// grab the original beforeEach and afterEach calles
var beforeEach = describeFunc.beforeEach;
var afterEach = describeFunc.afterEach;
// replace beforeEach
describeFunc.beforeEach = function (fn) {
// call the original beforeEach, in the correct context
beforeEach.call(describeFunc, function () {
// create the server
myServer = create();
// call what ever was passed into beforeEach
fn();
});
};
describeFunc.afterEach = function (fn) {
afterEach.call(describeFunc, function () {
destroy(myServer);
fn();
});
};
}
return {
create: create,
destroy: destroy,
init: init,
server: function () { return myServer; }
}
})();
testFile.js
/// <reference path="fakeServer.js" />
describe("testing123", function () {
// added for testing only
var beforeEachCalled, afterEachCalled;
FakeServer.init(this);
beforeEach(function () {
// added for testing only
beforeEachCalled = true;
});
afterEach(function () {
// added for testing only
afterEachCalled = true;
});
it("should work", function () {
// to access the server
var s = FakeServer.server();
});
});
beforeEach
和afterEach
是全局函数,您可以添加任意数量的挂钩。你应该能够简单地从你的助手模块调用它们,而不需要做任何特殊的事情:
var FakeServer = function() {
var server;
beforeEach(function() {
server = create();
});
afterEach(function() {
destroy(server);
});
};
describe('module', function() {
FakeServer();
it('works', function() {});
});
相关文章:
- Mocha 的 beforeEach() 和 done() 函数不起作用
- 在jasmine描述函数中,自动向beforeEach和afterEach添加代码
- beforeEach 不会在模块化 QUnit/Sinon 测试中使用 CoffeeScript 中的 Require.
- 如何为 Jasmine/Angular 创建一个帮助程序来组合多个 beforeEach
- 如果“beforeEach”中的代码是异步的,如何在 Jasmine 中测试方法
- `beforeEach` Behavior with Nested Tests in Intern
- 如何在Jasmine JS中重用beforeEach/afterEach
- Jasmine 2.0 async beforeEach不等待async完成
- 使用Jasmine进行单元测试:测试没有看到beforeEach()中的代码's spyOn()
- 你能在beforeEach中有多个spyObjs吗?
- 如何在vue-router's beforeEach中使用vue-router's的动作?
- 全局BeforeEach,用于用Mocha和Angular模拟HTTP请求
- js测试bail(false)对beforeEach不起作用
- 在beforeEach期间将vuex模块状态传递给vue-router
- 在Mocha的afterEach钩子中检测测试失败
- 茉莉'在测试我的REST API时,s afterEach似乎在beforeEach之前运行
- (窗口.beforeEach || window.setup)不是一个函数
- JSHint警告Mocha 'beforeEach'即使使用"mocha": tru
- 摩卡测试没有按正确的顺序运行,使用before/beforeEach
- 在mocha.js和chai.js中基本但正确地使用beforeEach()或afterEach()