tou*_*rab 6 javascript jasmine
我有一个 JavaScript 文件main_one.js,它需要另一个 JavaScript 文件helper.js。
helper.js
warp = {
postThisEvent: function(a) {
// some operation on a
}
};
Run Code Online (Sandbox Code Playgroud)
main_one.js
var Helper = require('path/helper.js');
// some steps
Helper.warp.postThisEvent(event);
Run Code Online (Sandbox Code Playgroud)
我想event使用 Jasmine进行捕捉。如何创建我的间谍对象捕获event的postThisEvent()?
try*_*lly 13
在 Jasmine 测试中 require Helper,然后以这种方式进行 spy:
spyOn(Helper.warp, "postThisEvent").and.callThrough();
Run Code Online (Sandbox Code Playgroud)
这将用间谍功能替换postThisEvent对象Helper.warp。当它被调用时,间谍将注册该调用,然后按照callThrough().
然后你可以期望postThisEvent()以这种方式使用预期的对象调用它:
expect(Helper.warp.postThisEvent).toHaveBeenCalledWith(jasmine.objectContaining({
someProperty: "someValue"
}));
Run Code Online (Sandbox Code Playgroud)
jasmine.objectContaining() 是一个助手,它只会测试预期属性是否存在于被测对象的多个属性中。
您还可以直接检查复杂对象:
expect(Helper.warp.postThisEvent.calls.mostRecent().args[0].someProperty).toBe("someValue");
Run Code Online (Sandbox Code Playgroud)
请注意,这样的间谍在postThisEvent()保存到一个变量时可能不起作用,然后像这样调用:
var postThisEvent = Helper.warp.postThisEvent;
function triggering() {
postThisEvent({ someProperty: "someValue" })
}
// now a spy is created and then triggering() is called
Run Code Online (Sandbox Code Playgroud)
在这种情况下,在监视时无法访问对原始方法的引用。在这种情况下,无法在 Javascript 中拦截函数/方法。
看
| 归档时间: |
|
| 查看次数: |
5636 次 |
| 最近记录: |