#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'}));