Невозможно издеваться над внешним API с помощью Nock

У меня есть служба Node.js, которая вызывает внешний API для сбора некоторых данных перед возвратом ответа пользователю. Я хочу издеваться над этим внешним API, чтобы протестировать свою службу, но, к сожалению, ответ, который я получаю, не имеет содержания (только статус 200). Вот мой тест:

const nock = require('nock');
const expect = require('chai').expect;
const request = require('supertest');
const httpStatus = require('http-status');

var app = require('../index');

describe('Get Account Summary test', function () {

    it('Should return a clients account summary successfully', function (done) {

        nock('https://external.api')
            .post('/v3/restful-api-endpoint')
            .reply(200, {
                "status": 200,
                "message": "This is a mocked response"
            });

        request(app)
            .get('/api/account/summary/dummy-request-id')
            .expect(httpStatus.OK)
            .end(function(err, res) {
                expect(res.body.message).to.equal('This is a mocked response');
                done();
            });
    });
});

res.body возвращает неопределенное значение. Я не понимаю, почему.


person farbodg    schedule 12.07.2018    source источник


Ответы (1)


Без источника вашей конечной точки трудно сказать, но проблема, скорее всего, кроется в нем. В самом тесте, похоже, нет ничего плохого. Обязательно дождитесь своего ответа от внешнего API (используя промисы, async/await или обратный вызов, поскольку это часто является источником путаницы.

person Rich Churcher    schedule 12.07.2018
comment
поэтому моя служба использует глагол GET, но мне нужно вызвать внешний API с помощью POST. Вот почему у меня есть POST для внешнего вызова API. - person farbodg; 12.07.2018
comment
Мой плохой, я пропустил, что маршруты были другими. В этом случае ответ может быть любым, поскольку мы не знаем, что находится в коде вашей конечной точки. Вы можете опубликовать это тоже. - person Rich Churcher; 12.07.2018
comment
Верно... в этом есть смысл. Потому что я беру один ответ и трансформирую его в другой ответ. Мне нужно выяснить трансформацию там - person farbodg; 12.07.2018
comment
Ага! Я исправлю свой ответ и, думаю, опубликую, если вы все еще не можете заставить его работать. Совет для профессионалов: убедитесь, что вы ждете ответа от внешнего API, прежде чем отвечать, это частая причина неопределенных значений. - person Rich Churcher; 12.07.2018
comment
Вы помогли разобраться с проблемой. Понятно, что. - person farbodg; 12.07.2018