引导一个摩卡testing套件
我有许多testing分布在Node JS应用程序的多个文件中。 我想在Mocha执行任何testing文件之前运行引导代码。 例如,我可以在每个实际testing中设置全局variables。
示例引导代码
global.chai = require('chai'); global.expect = chai.expect; global.sinon = require('sinon');
看起来Mocha按字母顺序加载/testing所有文件,所以如果我将这个引导代码命名为“bootstrap.js”,并且其他所有的文件都以“B”开始,那么它就起作用了。
显然,这是脆弱和糟糕的,但是我不想把这个样板文件放在每个testing文件的顶部。
我如何告诉摩卡首先加载引导脚本,或创build一些function相当的东西?
你有没有尝试mocha --require mymodule.js TESTS_DIR
从文档
-r, – 需要
–require选项对于像should.js这样的库非常有用,因此您可以简单地 – 在每个testing文件中,不要手动调用require('should')。 请注意,这样可以很好地适用于Object.prototype,但是如果你想访问一个模块的输出,你将不得不要求它们,例如var should = require('should')。
你也可以在每个testing的顶部写入require("./bootstrap.js")
并运行testing。
我使用摩卡的旗帜 – 延迟
如果您需要在任何套件运行之前执行asynchronous操作,则可能会延迟root套件。 只需使用–delay标志运行摩卡。 这将在全局上下文中提供一个特殊的函数run()。
setTimeout(function() { // do some setup describe('my suite', function() { // ... }); run(); }, 5000);
如果在运行摩卡之前,您希望首先在使用ECMAScript 2015模块语法的文件(即import
而不是require
)中运行一些引导代码,
- 创build以下文件:
./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语法的unit testing,例如箭头函数, 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); }); });
- 在terminal上运行以下命令来安装相关的NPM软件包:
npm install babel-polyfill babel-register chai sinon mocha
- 使用以下terminal命令和标志运行testing套件:
mocha --require ./setupBabel.js --require ./setupDependencies.js ./test/codeSpec.js