मैंने axios-mock-adapter से MockAdapter का उपयोग करके निम्नलिखित परीक्षण किया। हालांकि मैं यह दावा करने की कोशिश कर रहा हूं कि गेट फ़ंक्शन को प्रभावी ढंग से बुलाया गया है इसलिए मैंने एक जासूस बनाया। किसी कारण से यह काम नहीं कर रहा है और मुझे मिलता है:

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) })

}

0
Flama 28 जिंदा 2020, 22:06
क्या आप कृपया getPublications का कोड दिखा सकते हैं?
 – 
Julien TASSIN
31 जिंदा 2020, 00:12
अभी मेरा प्रश्न अपडेट किया है
 – 
Flama
31 जिंदा 2020, 01:24

3 जवाब

सबसे बढ़िया उत्तर

आपके द्वारा प्रदान किए गए परीक्षण कोड में आप axios get विधि पर जासूसी कर रहे हैं, लेकिन getPublications विधि में आप उस विधि को कॉल नहीं कर रहे हैं। इसके बजाय, आप सीधे axios विधि को कॉल कर रहे हैं।

चूंकि axios डिफ़ॉल्ट विधि की जासूसी करना आसान नहीं है, मैं get विधि का उपयोग करने के लिए कोड को getPublications में बदलने का सुझाव दूंगा:

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) })
}
1
mgarcia 31 जिंदा 2020, 22:00

मुझे अपने परीक्षण में 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
})
0
Ian Vasco 28 जिंदा 2020, 23:40
मैं आपके उत्तर की सराहना करता हूं लेकिन मैं axios-mock-adapter का उपयोग जारी रखना चाहता हूं।
 – 
Flama
29 जिंदा 2020, 04:47
ठीक है, बस सोच रहा था कि क्या आपने async प्रतीक्षा के बजाय किसी वादे का उपयोग करने का प्रयास किया है
 – 
Ian Vasco
29 जिंदा 2020, 16:43
दूसरी तरफ, मैं इसके बजाय प्रकाशन सेवा के लिए एक अलग परीक्षण करना चाहता हूं और इस परीक्षण में प्रकाशन सेवा के लिए एक नकली प्रतिक्रिया का उपयोग करना चाहता हूं। विचार निर्भरता नहीं है।
 – 
Ian Vasco
29 जिंदा 2020, 16:49

आप https://github.com/ctimmerm/axios-mock-adapter#history का उपयोग कर सकते हैं यह जांचने की सुविधा है कि क्या वास्तविक कॉल किए गए हैं और यूआरएल, हेडर, विधियों और अन्य पर जोर दें।

0
Witold Szczerba 26 अगस्त 2021, 12:46