Как получить данные из ответа в Pact - PullRequest
0 голосов
/ 25 января 2019

Я использую Pact для тестирования API в проекте React.Но я не могу получить данные, которые я ожидаю от ответа.Я думаю, что в конфигурации Pact нет ошибки.

Вот мой тестовый код с Pact.

const { Pact } = require('@pact-foundation/pact');
const { getAllServices } = require('./index.ts');

describe('The API', () => {
    const res = [{
        id: '1',
        name: 'service1'
    },{
        id: '2',
        name: 'service2'
    },{
        id: '3',
        name: 'service3'
    }]
    describe("Services API testing", () => {
        beforeEach(() => {
            const interaction = {
                uponReceiving: "",
                withRequest: {
                    method:  'GET',
                    path:  '',
                    query:  '',
                    headers: {
                      Accept: 'application/json'
                    }
                },
                willRespondWith: {
                    status: 200,
                    headers: {
                        'Content-Type': 'application/json'
                    },
                    body: res
                }
            };
            return provider.addInteraction(interaction);
        });

        it('returns all services', (done) => {
            return getAllServices()
                .then(response => {
                    expect(response.data).toEqual(res);
                    done()
                })
                .then(() => provider.verify());
        });
    });
});

Это формат данных, который я получил.

Body {
      url: 'http://192.168.0.73:8080/services',
      status: 200,
      statusText: 'OK',
      headers: 
       Headers {
         _headers: 
          { 'content-type': [Array],
            'transfer-encoding': [Array],
            date: [Array],
            connection: [Array] } },
      ok: true,
      body: 
       PassThrough {
         _readableState: 
          ReadableState {
            objectMode: false,
            highWaterMark: 16384,
            buffer: [Object],
            length: 2743,
            pipes: null,
            pipesCount: 0,
            flowing: null,
            ended: false,
            endEmitted: false,
            reading: true,
            sync: false,
            needReadable: true,
            emittedReadable: true,
            readableListening: false,
            resumeScheduled: false,
            destroyed: false,
            defaultEncoding: 'utf8',
            awaitDrain: 0,
            readingMore: false,
            decoder: null,
            encoding: null },
         readable: true,
         domain: null,
         _events: 
          { end: [Object],
            prefinish: [Function: prefinish],
            unpipe: [Function: onunpipe],
            drain: [Function],
            error: [Function: onerror],
            close: [Object],
            finish: [Object] },
         _eventsCount: 7,
         _maxListeners: undefined,
         _writableState: 
          WritableState {
            objectMode: false,
            highWaterMark: 16384,
            finalCalled: false,
            needDrain: false,
            ending: false,
            ended: false,
            finished: false,
            destroyed: false,
            decodeStrings: true,
            defaultEncoding: 'utf8',
            length: 0,
            writing: false,
            corked: 0,
            sync: false,
            bufferProcessing: false,
            onwrite: [Function: bound onwrite],
            writecb: null,
            writelen: 0,
            bufferedRequest: null,
            lastBufferedRequest: null,
            pendingcb: 0,
            prefinished: false,
            errorEmitted: false,
            bufferedRequestCount: 0,
            corkedRequestsFree: [Object] },
         writable: true,
         allowHalfOpen: true,
         _transformState: 
          { afterTransform: [Function: bound afterTransform],
            needTransform: true,
            transforming: false,
            writecb: null,
            writechunk: null,
            writeencoding: 'buffer' } },
      bodyUsed: false,
      size: 0,
      timeout: 0,
      _raw: [],
      _abort: false }

Пожалуйста, поделитесь своим исправлением или советами, если вы сталкивались с такой вещью раньше или у вас есть какие-либо хорошие замечания.Буду признателен за любые ваши посты.Заранее спасибо.

1 Ответ

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

Похоже, что это не проблема, связанная с pact - формат данных выглядит так, как будто вы используете fetch, но не используете API правильно.

попробуйте поменять местами:

return getAllServices()
            .then(response => {
                expect(response.data).toEqual(res);
                done()
            })

для:

return getAllServices()
            .then(response => {
                expect(response.json()).toEqual(res);
                done()
            })

В качестве точки стиля Pact должен протестировать весь уровень API.Чтобы придерживаться этого стиля, я бы на самом деле переместил вызов response.json() внутрь getAllServices().

...