我从事这项工作已经很长时间了,也许我只是想念一些东西,但是我的研究并未产生任何对我有帮助的结果。
所以我的问题是:
如果我有这样的代码:
shell.on('message', function (message) {
// do something
});
我想测试它是否已被某个特定消息(甚至是错误)调用,我可以用Sinon进行某种方式吗? (仅在外部函数中执行操作会在某种程度上起作用,因此我希望得到这样的答案,即至少可以假调用shell.on
来测试内部函数是否被调用)。>
“外壳”是npm包“ Python-Shell”的外壳的一个实例
也许根本不可能,或者我只是盲目,但任何帮助都将不胜感激!
答案 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);
});
如果您不想在运行测试时阻止默认行为,这可能会更有用。