引导一个摩卡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,例如箭头函数, letconst

 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