我正在努力弄清楚如何在我的单元测试中使用sinon伪造服务器。
他们的文档中的示例是:
setUp: function () {
this.server = sinon.fakeServer.create();
},
"test should fetch comments from server" : function () {
this.server.respondWith("GET", "/some/article/comments.json",
[200, { "Content-Type": "application/json" },
'[{ "id": 12, "comment": "Hey there" }]']);
var callback = sinon.spy();
myLib.getCommentsFor("/some/article", callback);
this.server.respond();
sinon.assert.calledWith(callback, [{ id: 12, comment: "Hey there" }]));
}
不幸的是,我不知道myLib.getCommentsFor(...)
中发生了什么,所以我不知道如何实际点击服务器。
所以在节点中,我正在尝试以下内容......
sinon = require('sinon');
srv = sinon.fakeServer.create();
srv.respondWith('GET', '/some/path', [200, {}, "OK"]);
http.get('/some/path') // Error: connect ECONNREFUSED :(
显然,http仍然认为我想要一个真正的服务器,那么如何连接到假的服务器呢?
答案 0 :(得分:0)
Sinon正在重写浏览器的XMLHttpRequest来创建FakeXMLHttpRequest。您需要找到一个节点XHR包装器,例如https://github.com/driverdan/node-XMLHttpRequest,以使Sinon拦截来自代码的调用。
答案 1 :(得分:0)
由于某种原因,当在节点下运行时,sinon不会自动接管XMLHttpRequest。
尝试像这样重写您的setUp函数:
setUp: function () {
this.server = sinon.fakeServer.create();
global.XMLHttpRequest = this.server.xhr;
},
您不需要任何其他XMLHttpRequest库。