![](/img/trans.png)
[英]Jasmine Unit Testing: How can I spy on Function.prototype.call() in a function parameter that is passed to my method under test?
[英]Jasmine: can't test function being passed as parameter
這是我的js文件:
My.File = {
someMethod: function() {
var finalURL = "https://some.url.com"
var somePostCall = $.post(My.URL, {
sessionToken: My.Session.sessionToken
});
somePostCall.done(function(response) {
//do something with the response ===> I want to test this function, and mock the 'response'
});
}
}
我想要做的是編寫一個測試,該測試涵蓋在“完成”調用中傳遞的函數。 我不想進行實際的 ajax 調用,我想從 http 調用中模擬響應,並且仍然希望調用 somePostCall 承諾。 當“完成”方法時,“響應”必須用我編造的東西來嘲笑。
我一直在嘗試從 $.post 調用中捕獲響應。 像這樣:
spyOn($, 'post').and.callThrough();
My.File.someMethod();
var promise = $.post.calls.mostRecent().args[0];
問題是 .args[0] 不從 $.post 返回值,它只是傳遞的參數。 如果我可以窺探 $.post 的響應,那么我就可以窺探它,並捕獲傳遞給“done”方法的函數。 這樣我至少可以手動調用它,並傳遞一個模擬的“響應”。
有任何想法嗎?
.args[0]
不返回已解決的承諾。 它只是檢查傳遞給函數的參數。 它也是異步的。 所以你的期望需要等待,直到承諾得到解決。
My.File = {
someMethod: function() {
var finalURL = "https://some.url.com"
return $.post(finalURL, { // return the promise
sessionToken: My.Session.sessionToken
});
}
}
規范文件。
it('some spec', async () => { // Async
spyOn($, 'post').and.callThrough();
const response = await My.File.someMethod();
// check if post method is called with correct arguments e.g My.URL is what you expect
const url = $.post.calls.mostRecent().args[0]
expect(url).to.be("https://some.url.com");
// test the response
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.