簡體   English   中英

Jasmine:無法測試作為參數傳遞的函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM