【发布时间】:2016-10-18 16:59:00
【问题描述】:
我正在关注 SinonJS Fake Server tutorial,我正在运行这个简单的代码:
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({ 失败。有人对此有任何想法吗?
【问题讨论】:
-
您似乎只是逐字复制了示例。无法想象出了什么问题。
-
@RobertMoskal 我认为这可能是我如何获取 jQuery 的问题。您通常如何将其导入到这样的文件中?
-
嗯,你可能是对的。稍后我将研究我的一个项目,在那里我进行了类似的测试。
-
仍然看起来或多或少正确,但确实没有加载 jquery 可能是个问题。如果你在 getTodos 中使用 console.log($) 会发生什么?
-
@RobertMoskal 它返回一个大函数,所以肯定有东西。
标签: jquery unit-testing reactjs mocha.js sinon