我有多个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不得再拨两次mocha测试。
导入多个文件是否会在每次两次之前调用?有人可以建议任何可能的解决方案吗?我也尝试了sinon.sandbox
,但它不起作用
答案 0 :(得分:0)
我们需要确定您在基本文件中的要求是否确定。
我的猜测只是您需要来自多个文件的文件,每次执行此操作时都会添加设置和拆卸功能。这是因为所有测试共享相同的外部范围。要求基础文件十次也会将beforeEach添加十次。
正确的方法是使用sinon.sandbox或sinon-test。更容易避免一个测试干扰下一个测试。
但无论你做什么,你都需要导出该函数并在每个文件的beforeEach中运行它
通常喜欢这个
const base = require('./base')
describe('module one', ()=> {
beforeEach(base.commonStubs);
it('should.... ',..);
})