Как вернуть недопустимый буфер для проверки вызова API? - PullRequest
0 голосов
/ 08 января 2019

В настоящее время я учусь писать модульные тесты в 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://stackoverflow.com').get('/').reply(200, { message: true })
  });

  it('Goes trough the happy flow', async () => {
    return doARequest.doARequest('https://stackoverflow.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 Ответ

0 голосов
/ 08 января 2019

Прямо сейчас вы используете стенографию nock для передачи назад объекта, т.е. эту строку:

nock('https://stackoverflow.com').get('/').reply(200, { message: true });

Это то же самое, что возвращать строку JSON или:

nock('https://stackoverflow.com').get('/').reply(200, JSON.stringify({
    message: true
}));

Чтобы принудительно завершить JSON.parse, просто передайте обратно строку, которая является недопустимым JSON, например ::

nock('https://stackoverflow.com').get('/').reply(200, 'bad');
...