具有多个 mocha 测试文件的 Sinon

Sinon with multiple mocha test files

我有多个 Mocha 测试文件,使用一个名为 testBase.js 的共享基础文件。它负责设置所有存根和间谍。

如果我 运行 通过 mocha 的单个文件所有测试用例都通过但是当它 运行 通过 mocha *.js 测试时,测试用例开始失败并引发错误

TypeError: Attempted to wrap send which is already wrapped

这是我的 beforeEach 和 afterEach 块

beforeEach(function (done) {
    context.alexaSpy = sinon.spy(alexa, "send");
}

beforeEach(function (done) {
    context.alexaSpy.restore();
}

我实际上在两个块中都打印了日志,我注意到一件奇怪的事情。我这样看日志

-- BeforeEach Fired Test1
-- BeforeEach Fired Test1
-- AfterEach Fired Test1
-- AfterEach Fired Test1

我不知道为什么它会调用两次,这也是问题的根本原因。 BefireEach 不得为一次摩卡测试调用两次。

导入多个文件会调用两次beforeEach吗?有人可以对此提出任何可能的解决方案吗?我也试过 sinon.sandbox 但没用

我们需要看看你在基础文件中的要求如何才能确定。

我的猜测很简单,您需要来自多个文件的文件,并且每次执行此操作时都会添加设置和拆卸功能。发生这种情况是因为所有测试共享相同的外部范围。请求 Base 文件十次也会添加 beforeEach 十次。

正确的方法是使用 sinon.sandbox 或 sinon-test。更容易避免一个测试干扰下一个。

但是无论你做什么,你都需要导出函数 运行 在每个文件的 beforeEach 中

通常是这样的

const base = require('./base')

describe('module one', ()=> {
    beforeEach(base.commonStubs);

    it('should.... ',..);
 })