我有多个要测试的文件,所有这些文件都使用相同的自定义../tools/http.util.js
库:
const HttpUtil = require('../libs/http.util');
所以,我用这段代码在每个文件中嘲笑这个库:
before('before', function () {
let HttpUtilMock = sinon.stub();
HttpUtilMock.prototype.formGetUri = sinon.stub().returns("http://mock.com/");
HttpUtilMock.prototype.formBaseRequestHeader = sinon.stub().returns("headers");
testFunction.__set__("HttpUtil", HttpUtilMock);
});
当我运行mocha test/ --recursive --timeout=3000
时,我得到问题:http.util
文件在第一个测试文件中被模拟,但它没有在第二个文件中嘲笑 - 我得到启动第二个文件测试时http.util
出错。
我认为,在完成第一次文件测试后我必须清除测试数据,但是我无法找到任何关于sinon的清除命令,以清除变量mock。
答案 0 :(得分:0)
要清除sinon模拟,请使用还原方法myMock.restore();
答案 1 :(得分:0)
我正在考虑的另一种替代方法,而不是使用rewire
模块。
....
const sinon = require('sinon');
let sandbox;
before('before', function () {
sandbox = sinon.sandbox.create();
sandbox.stub(HttpUtil, 'formGetUri').returns('http://mock.com');
sandbox.stub(HttpUtil, 'formBaseRequestHeader').returns('headers');
});
after('after', function() {
sandbox.restore();
});
必须在测试完成后致电restore()
。