Я тестирую компонент React, используя Mocha/Chai/Sinon, и вызываю запрос AJAX в другом файле, используя что-то вроде renderedComponent.getTodos(callback)
. Я передаю обратный вызов, аналогичный этому руководству по Sinon FakeServer. Однако я получаю странную синтаксическую ошибку, из-за которой обратный вызов не вызывается, и поэтому server.requests
пуст.
Я знаю, что задавал аналогичный вопрос здесь, однако здесь проблема другая. что я вызываю запрос AJAX в другом файле, а не в том же файле, и теперь решение, которое работало раньше, больше не работает. Я не уверен, почему. В общем, мой вопрос таков: Есть ли что-то в включении функции в другой файл, что приводит к сбою загрузки Sinon в моем экземпляре JSDOM?
Для справки, вот моя инициализация renderedComponent и код FakeServer, находящиеся в моем тестовом файле:
test.js
renderedComponent = ReactTestUtils.renderIntoDocument(
<Component...>
<p>Drag & drop files here or click here to browse for files.</p>
</Component>
...
describe('Testing', function(){
var server;
before(function () { server = sinon.fakeServer.create(); });
after(function () { server.restore(); });
it("calls callback with deserialized data", function () {
var callback = sinon.spy();
renderedComponent.getTodos(callback);
// This is part of the FakeXMLHttpRequest API
server.requests[0].respond(
200,
{ "Content-Type": "application/json" },
JSON.stringify([{ id: 1, text: "Provide examples", done: true }])
);
assert(callback.calledOnce);
});
А вот функция serverRequest
в renderedComponent
, которая является компонентом React в другом файле, который я пытаюсь протестировать:
Component.js
var Component = React.createClass({
...
function getTodoscallback) {
$.ajax({
url: "/todo/items",
success: function (data) {
// Node-style CPS: callback(err, data)
callback(null, data);
}
});
}
}
Добавление параметра error
к запросу AJAX выявляет синтаксическую ошибку модуля узла jsdom, пытающегося выполнить urlObj = new URL(uri, documentBaseURLSerialized(this._ownerDocument));
Я предполагаю, что это связано с тем, что JSDom загружает jQuery и Sinon, но кроме этого я понятия не имею - буду признателен за любую помощь.