Javascript 在可选的全球职能部门:Sinon、mocha&;柴
我有一个方法可以检查是否定义了全局函数(它可能可用,也可能不可用,取决于每个客户端的请求)。如果定义了它,它将使用适当的数据调用它。否则,它将默默地失败。这是我们想要的行为 我想做的是测试它。有没有一种方法可以模拟和/或监视Javascript 在可选的全球职能部门:Sinon、mocha&;柴,javascript,testing,mocha.js,sinon,chai,Javascript,Testing,Mocha.js,Sinon,Chai,我有一个方法可以检查是否定义了全局函数(它可能可用,也可能不可用,取决于每个客户端的请求)。如果定义了它,它将使用适当的数据调用它。否则,它将默默地失败。这是我们想要的行为 我想做的是测试它。有没有一种方法可以模拟和/或监视libFunction,这样我就可以确保使用正确的数据调用它一次(这里的函数非常简单,在调用过程中会进行一些数据处理) 下面是有问题的方法: function sendData(data) { let exists; try { // eslint-disab
libFunction
,这样我就可以确保使用正确的数据调用它一次(这里的函数非常简单,在调用过程中会进行一些数据处理)
下面是有问题的方法:
function sendData(data) {
let exists;
try {
// eslint-disable-next-line no-undef
if (libFunction) exists = true;
} catch (e) {
exists = false;
}
if (exists) {
// eslint-disable-next-line no-undef
libFunction(data);
}
}
我曾尝试在测试中定义libFunction
,然后将其删除,但这并不是我想要的:
describe('sendEvent', function () {
function libFunction(data) {
console.log('hi', data);
}
it('should call libFunction once', function () {
var stub = sinon.stub(libFunction);
var data = "testing";
sendEvent(data);
expect(stub.called).to.be.true;
});
});
但是,此测试未通过:AssertionError:预期未定义为true
我曾尝试过类似的间谍行为:
describe('sendEvent', function () {
function libFunction(data) {
console.log('hi', data);
}
it('should call libFunction once', function () {
var spy = sinon.spy(libFunction);
var data = "testing";
sendEvent(data);
expect(spy.called).to.be.true;
});
});
这也会失败:AssertionError:expected false为true
有办法做到这一点吗?FWIW,我在试图解决在节点中存根全局方法的问题时遇到了这个问题。在我的例子中,这是可行的(我的示例使用了
Sinon.sandbox
,但是“常规的”Sinon.spy
也应该可行):
FWIW,我在试图解决在节点中存根全局方法的问题时遇到了这个问题。在我的例子中,这是可行的(我的示例使用了
Sinon.sandbox
,但是“常规的”Sinon.spy
也应该可行):
您可能想要
sinon.spy(窗口,'libFunction')
,您所做的是创建一个由libFunction
支持的间谍,而不是监视libFunction
。窗口没有定义,因为我没有在测试环境中模拟浏览器。还有其他方法吗?你可以尝试global
而不是window
。你可能想要sinon.spy(window,'libFunction')
,你要做的是创建一个由libFunction
支持的间谍,而不是监视libFunction
。window没有定义,因为我不是在测试环境中模拟浏览器。还有其他方法吗?您可以尝试global
而不是window
。
const encodeSpy = sandbox.spy(global, "encodeURIComponent");
// later...
Sinon.assert.calledWith(encodeSpy, {expectedParamValue});