Мой тест на обработку ошибок в приложении реагирования не работает, и я не уверен, почему.Код, который я тестирую, находится в main.js, и когда я тестирую функциональность в браузере, заставляя api отправить ответное сообщение об ошибке, он работает.Я также проверил, что тестируемый код попадает в правильный блок кода "case 404" при тестировании с использованием вызовов console.log, поэтому проблема заключается в насмешке над displayErrorModal.
//main.js (code to be tested)
import React from 'react'
import { SOMETHING_WENT_WRONG, FORBIDDEN, NOT_FOUND, NO_RESPONSE,
REQUEST_FAILED } from './util/error-message-types'
import displayErrorModal from './util/display-error-modal'
import { get } from 'axios'
import { render } from 'react-dom'
import { Provider } from 'react-redux'
import App from './app'
const patientId = window.requestParameters.patient_id
get('/api/v1/patients/' + patientId + '/views/multi-episode-summary',
{
patientId
}).then( //do some stuff
).then( // do some stuff
).catch((error) => {
if (error.response) { //response status code not 2xx
switch (error.response.status) {
case 403:
displayErrorModal('Error', FORBIDDEN)
break;
case 404:
displayErrorModal('Error', NOT_FOUND)
break;
case 500:
default:
displayErrorModal('Error', SOMETHING_WENT_WRONG)
break;
}
} else if (error.request) {//no response received
displayErrorModal('Error', NO_RESPONSE)
} else {//error in making request
displayErrorModal('Error', REQUEST_FAILED)
}
})
// display-error-modal.js within util folder
import ErrorModal from '../../../error-modal'
import React from 'react'
import { render } from 'react-dom'
export default (headerText, bodyText) => {
return render(
<ErrorModal
header={headerText}
body={bodyText}
/>,
document.getElementById('multiple-episode-view-app')
)
}
// main.test.js within a __tests__ folder
import React from 'react'
import axios from 'axios'
import displayErrorModal from '../util/display-error-modal'
import { SOMETHING_WENT_WRONG, FORBIDDEN, NOT_FOUND, NO_RESPONSE,
REQUEST_FAILED } from '../util/error-message-types'
const { it, expect } = global
jest.mock('axios')
jest.mock('../util/display-error-modal')
describe('Multi Episode Summary App', () => {
it('displays error modal for patient not found', () => {
window.requestParameters = { patient_id: 100019 }
const errorResponse = new Error('Patient not found.')
errorResponse.response = { status: 404 }
axios.get.mockRejectedValue(errorResponse)
require('../main')
expect(displayErrorModal).toHaveBeenCalledWith('Error', NOT_FOUND)
})
})
КогдаЯ запускаю тест, который завершается неудачно с сообщением «Ожидается, что фиктивная функция была вызвана с: ... Но она не была вызвана».