簡體   English   中英

使用 axios-mock-adapter 驗證請求?

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

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