axios-mock-adapter не соответствует URL, как ожидалось
Я имел обыкновение использовать axios-mock-adapter с большим успехом, но последние несколько раз я пытался его использовать, мои маршруты никогда не совпадали, и он все еще пытался выполнить реальную конечную точку.
Почему этот модульный тест все еще звонит на example.com и возвращает 404? Я бы ожидал, что он вернет 500.
тест / ЛИЭС /orgService/index.spec.js
const uuid = require('uuidv4')
const axios = require('axios')
const MockAdapter = require('axios-mock-adapter')
const mock = new MockAdapter(axios)
const { getOrgById } = require('../../../src/libs/orgService/index')
const chai = require('chai')
const chaiAsPromised = require('chai-as-promised')
chai.use(chaiAsPromised)
const expect = chai.expect
const orgServiceHost = 'https://example.com'
describe.only('#getOrgById failure', () => {
const id = uuid()
before(() => {
console.log('`${orgServiceHost}/organizations/${id}` = ', `${orgServiceHost}/organizations/${id}`)
mock.onGet(`${orgServiceHost}/organizations/${id}`).reply(500) <-- SHOULD BE RETURNING 500!!
})
after(() => {
mock.reset()
})
it('should fail to fetch an organization', () => {
return expect(getOrgById(orgServiceHost, id, tkn)).to.eventually.be.rejected
})
})
SRC / ЛИЭС / orgService/index.js
const axios = require('axios')
function getOrgById (orgServiceHost, id, token) {
log.debug('orgServiceHost = ', orgServiceHost)
log.debug('id = ', id)
log.debug('token = ', token)
return new Promise((resolve, reject) => {
if (id === undefined) {
return resolve()
}
console.log('`${orgServiceHost}/organizations/${id}` = ', `${orgServiceHost}/organizations/${id}`)
axios({
url: `${orgServiceHost}/organizations/${id}`,
method: 'GET',
headers: {
Authorization: `Bearer ${token}`,
Accept: 'application/json',
}
})
.then(res => {
return resolve(res.data)
})
.catch(err => {
log.error('getOrgById err = ', err)
return reject(err)
})
})
}
module.exports = { getOrgById }
2 ответа
(Примечание: у меня недостаточно кредитов, чтобы комментировать, поэтому публикуем ниже как ответ.)
Я не уверен, что это будет работать, но, пожалуйста, попробуйте создать экземпляр Axios
before(() => {
instance = AxiosApi.getAxiosInstance();
mock = new MockAdapter(instance);
mock.onGet(`${orgServiceHost}/organizations/${id}`).reply(500);
})
Проблема в том, что вы возвращаете Promise
из службы. Попробуйте что-то вроде:
it('should fail to fetch an organization', () => {
getOrgById(orgServiceHost, id, tkn)
.then(() => {
assert.fail("custom error message"); // or any other failure here
}).catch((exception) => {
expect(true).toBeTruthy(); // or any other way to pass the test
});
});