Поддельное тело ответа сервера должно быть строкой, но не определено

#reactjs #mocha.js #sinon #chai #reactjs-testutils

#reactjs #mocha.js #sinon #чай #reactjs-testutils

Вопрос:

Я пытаюсь выполнить модульные тесты в компонентах react с помощью mocha, chai и sinon.

Мой первый тест сработал, это простая проверка, существует ли компонент и правильно ли используются реквизиты.

Теперь у меня проблемы с ajax в тестах.

Вот мой код:

 import * as React from 'react';
import chai from 'chai';
import TestUtils from 'react-addons-test-utils';
import TransmissorAdd from '../../../middle/transmissors/TransmissorAdd';
import sinon from 'sinon'

const expect = chai.expect

describe('components/transmissors/TransmissorAdd', () => {

    let params = {
        method: 'add'
    }
    var server = null;

    beforeEach(function () {
        server = sinon.fakeServer.create();
    });

    afterEach(function () {
        server.restore();
    });

    it('ajax working', () => {
        // Set up the fake response
        server.respondWith('GET', '/api/client/1/',
            [200, {'Content-Type': 'application/json'},
                JSON.stringify(
                    {
                        "id": 1,
                        "first_name": "firstname",
                        "last_name": "lasname",
                        "account": "0016",
                        "cpf": "55555555555",
                        "rg": "5555555555",
                        "birthdate": "0000-00-00",
                        "street": "Av. street",
                        "number": 881,
                        "complement": "",
                        "district": "xxxxxx",
                        "city": "city",
                        "country": "Brasil",
                        "state": "RS",
                        "zip_code": "00000000",
                        "health_plan": "",
                        "account_phone": "5599999999",
                        "contact_phone": "",
                        "key_box": "",
                        "general_info": ""
                    }
                )
            ]
        );

        server.respondWith('POST', '/api/transmissors/',
            [200, JSON.stringify({'response': 'ok'})]);


        const transmissorAdd = TestUtils.renderIntoDocument(
            <TransmissorAdd params={params} />
        )

        server.respond();
    })

});
 

Я получаю это сообщение об ошибке:

  TypeError: Fake server response body should be string, but was undefined
      at responseArray (node_modules/sinon/lib/sinon/util/fake_server.js:31:19)
      at Object.respondWith (node_modules/sinon/lib/sinon/util/fake_server.js:178:67)
      at Context.<anonymous> (assets/js/components/__tests__/middle/transmissors/TransmissorAdd.test.js:55:16)
 

Что не так?

Заранее спасибо

Комментарии:

1. Ваш компонент вызывает /api ?

2. Да, все мои компоненты вызывают / api

Ответ №1:

Похоже, вам нужно передать пустые параметры {}

 server.respondWith('POST', '/api/transmissors/', [200, {}, JSON.stringify({'response': 'ok'})]);
 

Вы можете использовать эту более короткую форму

 server.respondWith('POST', '/api/transmissors/', JSON.stringify({'response': 'ok'}));