我希望在我的Coffeescript单元测试中使用测试替身来帮助处理关注点分离。
我正在使用sinon和mocha(在konacha中使用Rails应用程序的情况下)。
目前,我正在尝试似乎直接从文档中学到的内容,其中有一个关于模拟用法的示例:
var myAPI = { method: function () {} };
var spy = sinon.spy();
var mock = sinon.mock(myAPI);
mock.expects("method").once().throws();
PubSub.subscribe("message", myAPI.method);
PubSub.subscribe("message", spy);
PubSub.publishSync("message", undefined);
mock.verify();
assert(spy.calledOnce);
在我的情况下,我试图对一个对象进行函数调用的模拟,如下所示:
canvas = sinon.mock getContext: (arg) ->
canvas.expects("getContext").once()
canvas.getContext('2d')
canvas.verify()
这会产生一个TypeError
,指示getContext
不是一个函数:
TypeError: canvas.getContext 不是一个函数
Mock似乎已经设置并且得到正确验证。当省略对getContext
的调用时,我会收到未满足期望的通知:
ExpectationError: 预期调用 getContext([...]) (从未被调用)
编译后的JavaScript代码如下:
var canvas;
canvas = sinon.mock({
getContext: function(arg) {}
});
canvas.expects("getContext").once();
canvas.getContext('2d');
canvas.verify();
这个错误可能是什么原因造成的?
我在想是否在函数参数上做了一些奇怪的事情,但我可以在调用 getContext
时不使用参数重现这个错误。