我有一个JavaScript文件main_one.js
,需要另一个JavaScript文件helper.js
。
helper.js
warp = {
postThisEvent: function(a) {
// some operation on a
}
};
main_one.js
var Helper = require('path/helper.js');
// some steps
Helper.warp.postThisEvent(event);
我想使用Jasmine捕获event
。如何创建我的间谍对象以在event
中捕获postThisEvent()
?
答案 0 :(得分:2)
在Jasmine测试中需要Helper
,然后以这种方式窥探:
spyOn(Helper.warp, "postThisEvent").and.callThrough();
这将使用间谍功能替换对象postThisEvent
上的Helper.warp
。当它被调用时,间谍将注册呼叫而不是调用原始方法,因为这是callThrough()
指示的。
然后你可以期望以这种方式用预期的对象调用postThisEvent()
:
expect(Helper.warp.postThisEvent).toHaveBeenCalledWith(jasmine.objectContaining({
someProperty: "someValue"
}));
jasmine.objectContaining()
是一个帮助程序,它只测试在测试对象的多个属性中是否存在expecte属性。
您还可以直接检查复杂对象:
expect(Helper.warp.postThisEvent.calls.mostRecent().args[0].someProperty).toBe("someValue");
请注意,当postThisEvent()
保存到变量时,这样的间谍可能无法工作,然后像这样调用:
var postThisEvent = Helper.warp.postThisEvent;
function triggering() {
postThisEvent({ someProperty: "someValue" })
}
// now a spy is created and then triggering() is called
在这种情况下,在进行间谍活动时无法达到对原始方法的引用。在Javascript中,在这种情况下无法拦截函数/方法。
见