Я следую руководству по поддельному серверу SinonJS и запускаю этот простой код:
var server;
before(function () { server = sinon.fakeServer.create(); });
after(function () { server.restore(); });
it("calls callback with deserialized data", function () {
var callback = sinon.spy();
getTodos(42, 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);
});
Я включаю функцию getTodos в тот же файл. Вот так же:
function getTodos(listId, callback) {
$.ajax({
url: "/todo/" + listId + "/items",
success: function (data) {
// Node-style CPS: callback(err, data)
callback(null, data);
}
});
}
Однако я получаю сообщение об ошибке TypeError: Cannot read property 'respond' of undefined
. Похоже, что server.requests
пусто — почему? Как я могу убедиться, что запросы отображаются?
ОБНОВЛЕНИЕ: мне удалось сузить круг проблемы. Я добавил обратный вызов ошибки в функцию getTodos и сделал console.log для ошибки. Оказывается, есть синтаксическая ошибка, исходящая от модуля узла jsdom, пытающегося выполнить urlObj = new URL(uri, documentBaseURLSerialized(this._ownerDocument));
, что затем приводит к сбою $.ajax({
. У кого-нибудь есть идеи по этому поводу?