在Sinon中伪调用带有特定参数的函数

时间:2018-08-01 06:00:01

标签: javascript unit-testing mocha sinon

我从事这项工作已经很长时间了,也许我只是想念一些东西,但是我的研究并未产生任何对我有帮助的结果。

所以我的问题是:

如果我有这样的代码:

shell.on('message', function (message) {
// do something
});

我想测试它是否已被某个特定消息(甚至是错误)调用,我可以用Sinon进行某种方式吗? (仅在外部函数中执行操作会在某种程度上起作用,因此我希望得到这样的答案,即至少可以假调用shell.on来测试内部函数是否被调用)。

“外壳”是npm包“ Python-Shell”的外壳的一个实例

也许根本不可能,或者我只是盲目,但任何帮助都将不胜感激!

1 个答案:

答案 0 :(得分:1)

python-shell实例是EventEmitter的实例。因此,您可以通过发出以下消息来触发on处理程序:

var PythonShell = require('python-shell');

var pyshell = new PythonShell('my_script.py');

pyshell.on('message', function (message) {
    console.log("recieved", message);
});

pyshell.emit('message', "fake message?")
// writes: 'recieved fake message?'

您还可以使用Sinon存根实例,并调用yields来调用回调:

const sinon = require('sinon')
var PythonShell = require('python-shell');

var pyshell = new PythonShell('my_script.py');
var stub = sinon.stub(pyshell, "on");
stub.yields("test message")
// writes received test message to console

pyshell.on('message', function (message) {
    console.log("received", message);
});

如果您不想在运行测试时阻止默认行为,这可能会更有用。