#node.js #testing #jestjs #nock
#node.js #тестирование #jestjs #nock
Вопрос:
Вот мой пример кода по какой-то причине Nock не работает для меня, поскольку он не может соответствовать URL-адресу при добавлении заголовков, при комментировании кода, как показано ниже, при прохождении теста. Я не могу понять, почему nock не понимает заголовки, как сказано в документе, чтобы сделать это, что я и сделал: reqheaders: { ‘authorization’: ‘Basic Auth’ }
Надеясь, что кто-нибудь сможет уловить что-то странное, что я делаю.
const axios = require('axios');
async function postAPI(params) {
let response1 = '';
try {
response1 = await axios.post('http://someurl/test2', params);
} catch(error) {
throw error;
}
try {
console.log("Im here", response1.data.sample)
const response = await axios.get('http://testurl/testing', {
// headers: {
// 'authorization' : 'Basic Auth' // response1.data.sample
// }
});
return response.data;
} catch(err) {
console.log("Error", err)
}
}
exports.postAPI = postAPI;
Тест
it('make an api call - POST', async () => {
nock('http://someurl')
.persist()
.defaultReplyHeaders({
'access-control-allow-origin': '*',
'access-control-allow-credentials': 'true'
})
.post('/test2')
.reply(200, {
sample : 'test2'
});
const test = nock('http://testurl', {
// reqheaders: {
// 'authorization' : 'Basic Auth'
// }
})
.defaultReplyHeaders({
'access-control-allow-origin': '*',
'access-control-allow-credentials': 'true'
})
.get('/testing')
.reply(200, { data : 'test' });
const response = await postAPI();
console.log("XXXX", response)
expect(response.data).toEqual("test");
});
Комментарии:
1. Вы пробовали включить debug, чтобы узнать, почему Nock не соответствует вашему запросу? github.com/nock/nock#debugging
2. Возникли трудности с этим в рабочем коде, по какой-то причине он не попадает по URL-адресу и получает ответ undefined. Где, как дома, что-то получалось, кроме проблем с заголовком auth. Вместо этого попробую макет axios и посмотрю, работает ли это лучше для меня. В любом случае спасибо.
Ответ №1:
Ваши reqheaders должны соответствовать тому, что вы передаете в заголовках запросов axios.
reqheaders: {
'authorization' : 'Basic Auth test2'
}
когда вы объединяете заголовок авторизации в основной функции, не забудьте добавить пробел между Auth и response1.data.sample 🙂
'authorization' : 'Basic Auth ' response1.data.sample
Я попробовал ваш код, и он работает.
Полный тест:
const nock = require('nock');
const { postAPI } = require('./index');
const { expect } = require('chai');
describe('postapi', () => {
it('make an api call - POST', async () => {
nock('http://someurl')
.defaultReplyHeaders({
'access-control-allow-origin': '*',
'access-control-allow-credentials': 'true'
})
.post('/test2')
.reply(200, {
sample : 'test2'
});
nock('http://testurl', {
reqheaders: {
'authorization' : 'Basic Auth test2'
}
})
.defaultReplyHeaders({
'access-control-allow-origin': '*',
'access-control-allow-credentials': 'true'
})
.get('/testing')
.reply(200, { data : 'test' });
const response = await postAPI();
console.log("XXXX", response)
expect(response.data).to.be.eql("test");
});
});
Комментарии:
1. Спасибо, не заметил этого пробела 😀 использовал nock для некоторых других вещей, но полезно знать, где я ошибался.