Как вернуть неверный буфер для проверки вызова API?
В настоящее время я учусь писать модульные тесты в Node.js. Для этого я сделал небольшой файл, который может сделать вызов API:
const https = require('https')
module.exports.doARequest = function (params, postData) {
return new Promise((resolve, reject) => {
const req = https.request(params, (res) => {
let body = []
res.on('data', (chunk) => {
body.push(chunk)
})
res.on('end', () => {
try {
body = JSON.parse(Buffer.concat(body).toString())
} catch (e) {
reject(e) //How can i test if the promise rejects here?
}
resolve(body)
})
})
req.end()
})
}
Чтобы протестировать счастливый поток этого файла, я подделал запрос, используя nock. Однако я хотел бы проверить, если JSON.parse
выдает ошибку. Для этого я думаю, что я должен подделать данные, которые находятся внутри Buffer.concat(body).toString()
, Поддельные данные должны быть чем-то JSON.parse
не могу разобрать. Таким образом, я могу проверить, будет ли обещание отклонено. Вопрос только в том, как мне это сделать?
Тестовый файл, соответствующий модулю doARequest выше:
const chai = require('chai');
const nock = require('nock');
const expect = chai.expect;
const doARequest = require('../doARequest.js');
describe('The setParams function ', function () {
beforeEach(() => {
nock('https://stackru.com').get('/').reply(200, { message: true })
});
it('Goes trough the happy flow', async () => {
return doARequest.doARequest('https://stackru.com/').then((res) => {
expect(res.message).to.be.equal(true)
});
});
it('Rejects when there is an error in JSON.parse', async () => {
//How can i test this part?
});
});
Любая помощь / предложения будут оценены.
1 ответ
Прямо сейчас вы используете стенографию nock для передачи назад объекта, то есть этой строки:
nock('https://stackru.com').get('/').reply(200, { message: true });
Это то же самое, что возвращать строку JSON или:
nock('https://stackru.com').get('/').reply(200, JSON.stringify({
message: true
}));
Заставить JSON.parse
чтобы потерпеть неудачу, просто передайте обратно строку, которая не является допустимой JSON, например:
nock('https://stackru.com').get('/').reply(200, 'bad');