[英]Verify request with axios-mock-adapter?
我使用axios-mock-adapter
MockAdapter 進行了以下測試。 但是,我試圖斷言 get 函數已被有效調用,因此我創建了一個間諜。 出於某種原因,它似乎不起作用,我得到:
expect(jest.fn()).toHaveBeenCalled()
Expected number of calls: >= 1
Received number of calls: 0
這是我的測試:
it('gets publications', async() => {
let spy = jest.spyOn(axios, "get");
var mock = new MockAdapter(axios);
mock.onGet(PUBLICATIONS_PATH + '/publications').reply(200,
{
answer: {
publications: [ "pub1", "pub2", "pub3" ]
}
});
let queryParameters = {
operation: 'FSale'
}
const publications = await PublicationService.getPublications(queryParameters);
expect(publications.data.answer.publications).toEqual([ "pub1", "pub2", "pub3" ]); // works fine
expect(spy).toHaveBeenCalled(); //This fails
})
我實際上是在嘗試使用這里回答的方法。
更新:這是 getPublications 的代碼
async function _getPublications(queryParameters){
return await axios({
method: 'get',
url: `${PUBLICATIONS_PATH}/publications`,
cancelToken: CancelTokenService.getSource().token,
params: queryParameters,
headers: {
authorization: LocalStorageService.getAuthorization(),
'Accept': ResourcesVersions.PUBLICATION
}
}).then(function (response){ return response }).catch(function (error){ return (axios.isCancel(error) ? error : error.response) })
}
在您提供的測試代碼中,您正在監視 axios get
方法,但在getPublications
方法中,您並未調用該方法。 相反,您直接調用axios
方法。
由於監視axios
默認方法並不容易,我建議更改getPublications
的代碼以使用get
方法:
async function _getPublications(queryParameters){
return await axios.get(`${PUBLICATIONS_PATH}/publications`, {
cancelToken: CancelTokenService.getSource().token,
params: queryParameters,
headers: {
authorization: LocalStorageService.getAuthorization(),
'Accept': ResourcesVersions.PUBLICATION
}
}).then(function (response){ return response }).catch(function (error){ return (axios.isCancel(error) ? error : error.response) })
}
我jest.spy
在我的測試中使用jest.spy
但我認為你可以嘗試以下方法:
import axios from 'axios';
jest.mock('axios');
...
it('gets publications', async() => {
const get = axios.get.mockResolvedValueOnce(yourMockedData)
let queryParameters = {
operation: 'FSale'
}
const publications = await PublicationService.getPublications(queryParameters);
expect(publications.data.answer.publications).toEqual([ "pub1", "pub2", "pub3" ]); // works fine
expect(get).toHaveBeenCalled(); //This fails
})
您可以使用https://github.com/ctimmerm/axios-mock-adapter#history功能來檢查已進行的實際調用並在 URL、標題、方法和其他內容上進行斷言。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.