使用sinon.js(和mocha)测试时出错。当我通过npm运行所有测试脚本时发生错误,但是当我通过IDE运行单个脚本时则不会。单独运行测试脚本可以正常工作,测试通过。
即。我有一个目录,里面有几个测试脚本。当我自己运行一个脚本时,测试通过。当我在目录中运行所有脚本时,tess失败并出现错误:
测试将失败
TypeError: Attempted to wrap getVariable which is already wrapped
虽然其他测试失败了:
TypeError: Cannot read property 'restore' of undefined
两个测试脚本都以相同的代码开头:
const
assert = require('assert'),
sinon = require('sinon');
global.context = {
getVariable: function(s) {}
};
var contextGetVariableMethod;
beforeEach(function () {
contextGetVariableMethod = sinon.stub(context, 'getVariable');
});
afterEach(function () {
contextGetVariableMethod.restore();
});
我猜mocha同时运行两个测试?而且测试相互干扰。我很困惑为什么测试的范围不是独立的......也许是global
的使用?
感谢
答案 0 :(得分:1)
根据Sinon JS文档,如果你有var stub = sinon.stub(object, "method");
你必须使用object.method.restore();
所以,在你的情况下:
afterEach(function () {
context.getVariable.restore()
});
答案 1 :(得分:0)
我想我已经成功解决了这个问题。对我有用的解决方案是重新声明在beforeEach方法中存根的对象。
例如:
const
assert = require('assert'),
sinon = require('sinon');
var contextGetVariableMethod;
beforeEach(function () {
global.context = {
getVariable: function(s) {}
};
contextGetVariableMethod = sinon.stub(context, 'getVariable');
});
afterEach(function () {
contextGetVariableMethod.restore();
});
不完全确定为什么会这样,但是像这样构造代码似乎已经解决了问题
答案 2 :(得分:0)
如果您正在调用相同的功能,请检查是否有其他对象丢失了要还原的对象