我在Node JS应用程序中的多个文件中分布了大量测试。我想在Mocha执行任何测试文件之前运行bootstrap代码。例如,我可以在每个实际测试中设置全局变量。
global.chai = require('chai');
global.expect = chai.expect;
global.sinon = require('sinon');
似乎Mocha按字母顺序加载/ test下的所有文件,所以如果我将这个引导代码命名为“bootstrap.js”,而其他所有文件都在“B”之后用起始字母命名,那么它就“有效”。
显然这很脆弱,但是我不想把这个样板需要我的支持库放在每个测试文件的顶部。
如何告诉Mocha首先加载引导脚本,或创建功能相同的东西?
答案 0 :(得分:10)
你试过mocha --require mymodule.js TESTS_DIR
来自文档
-r, - required
--require选项对于诸如should.js之类的库非常有用,所以你 可能只是 - 需要而不是手动调用 每个测试文件中的require('should')。请注意,这适用于 应该是因为它增强了Object.prototype,但是如果你想访问它 一个模块的导出你必须要求它们,例如var should = require('should')。
您也可以在每个测试的顶部写入以加载require("./bootstrap.js")
并运行测试。
答案 1 :(得分:2)
我使用mocha的标志--delay
如果您需要在任何之前执行异步操作 套件运行,你可能会延迟根套件。简单地用Mocha运行 --delay标志。这将在中提供一个特殊的函数run() 全球背景。
setTimeout(function() {
// do some setup
describe('my suite', function() {
// ...
});
run();
}, 5000);
答案 2 :(得分:0)
如果在运行Mocha之前,您希望首先在使用ECMAScript 2015模块语法的文件中运行一些引导代码(即import
而不是require
)
./ setupBabel.js (引导Babel转发器)
require('babel-polyfill');
require('babel-register');
./ setupDependencies.js (使用ES2015语法引导Chai和Sinon)
import chai from 'chai';
import sinon from 'sinon';
global.expect = chai.expect;
global.sinon = sinon;
./test / codeSpec.js (使用Chai,Sinon Stubs,Spies和ES2015语法进行单元测试,例如箭头函数,let
和const
)
describe('test suite', () => {
it('does not modify immutable constant value', () => {
const myStub = sinon.stub();
const mySpy = sinon.spy(myStub);
myStub.returns({});
let val = 1;
expect(val).to.not.equal(2);
sinon.assert.notCalled(mySpy);
});
});
npm install babel-polyfill babel-register chai sinon mocha
mocha --require ./setupBabel.js --require ./setupDependencies.js ./test/codeSpec.js
答案 3 :(得分:-2)
describe('异步钩子测试', function () {
const lover = {
bodyname: 'yueyue',
girlname: 'fangfang'
}
const test = 'lihang'
beforeEach('每一个测试之前的钩子', function () {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('通过')
})
})
})
it('方方爱张越', function () {
// 是否等于yueuyue
expect(lover.bodyname).to.equal('yueyue')
// 是否是一个字符串
lover.girlname.should.equal('fangfang')
})
})