Проблема с макетом второго запроса заключается в том, что вы настраиваете его для ответа, только если конечная точка запрашивается с параметрами { q: 'name' }
. Если вы хотите ответить одинаковыми данными для всех запросов на https://api.example2.com/search/things
, достаточно удалить атрибут params:
.onGet('https://api.example2.com/search/things', {
headers: { Authorization: `Bearer ${SECRET_KEY}` },
})
.reply(200, {
statuses: [
{
id: 123,
created_at: 'Thu Feb 27 22:54:02 +0000 2020',
text: 'Example one.',
},
{
id: 456,
created_at: 'Wed Feb 26 13:40:20 +0000 2020',
text: 'Example Two',
},
],
})
В вашем тесте также присутствуют другие проблемы. В поддельном ответе вы передаете данные в свойство statuses
, но в своем фактическом коде вы перебираете свойство array
.
Кроме того, метод read
получает два параметра, req
и res
. Если вы не предоставите эти объекты при вызове read
в своем тесте, он сломается, так как вы вызываете методы объекта res
.
Самый простой способ вызвать метод - создать поддельный req
и res
объекты и вызов метода read
с ними. Для простоты я создам макет с помощью sinon spies :
test('GET - /examples', async t => {
mock
.onGet('https://api.example.com/search/repositories, {
params: {
q: 'example',
},
})
.reply(200, {
total_count: 2,
incomplete_results: false,
items: [
{
id: 555,
name: 'exampleOne',
},
{
id: 666,
name: 'exampleTwo',
},
],
})
.onGet('https://api.example2.com/search/things', {
headers: { Authorization: `Bearer ${SECRET_KEY}` },
})
.reply(200, {
array: [
{
id: 123,
created_at: 'Thu Feb 27 22:54:02 +0000 2020',
text: 'Example one.',
},
{
id: 456,
created_at: 'Wed Feb 26 13:40:20 +0000 2020',
text: 'Example Two',
},
],
})
const res = {
status: sinon.stub().returnsThis(),
json: sinon.stub().returnsThis(),
};
try {
await read({}, res);
const data = res.json.firstCall.args[0];
t.is(data.result[0].id, 555)
} catch (err) {
console.log(`ERROR::: ${err}`)
}
});
Обратите внимание, что я высмеиваю объект запроса, передавая пустой объект, так как read
метод не использует никаких свойств запроса.