第一次尝试使用Sinon,因为它的虚假服务器功能让我可以存根API响应。测试本身是为Mocha编写的
但是,虚假服务器似乎没有拦截请求。
代码:
describe('when integrated', function() {
var server;
beforeEach(function() {
server = sinon.createFakeServer();
});
afterEach(function() {
server.restore();
});
it('can send a message to the notification service', function() {
server.respondWith("POST", new RegExp('.*/api/notificationmanager/messages.*'),
[200,
{ "Content-Type": "application/json" },
'{ "messageId":23561}'
]);
var messageOnly = new PushMessage(initMessageObj);
var originalUrl = PushMessage.serverUrl;
messageOnly.setServerAPI("http://a.fake.server/api/notificationmanager/messages");
console.log("fake server is: ", server);
messageOnly.notify()
.then(function(response) {
messageOnly.setServerAPI(originalUrl);
return response;
})
.then(function(response) {
response.should.be.above(0);
})
console.log(server.requests);
server.respond();
})
});
作为参考,PushMessage
是一个具有静态属性serverUrl
的对象。我只是将值设置为虚假的URL&然后重置它。
notify()
函数使用request-promise-native
向PushMessage的静态属性中的serverUrl
设置发布消息。
似乎正在发生的事情是,POST
请求最终会针对http://a.fake.server/api/notificationmanager/messages
的网址进行正确尝试,从而导致地址不存在的错误...
知道我做错了什么......?谢谢!
答案 0 :(得分:1)
关于此问题,Sinon GitHub存储库存在一些问题。 Sinon的假服务器:
提供XMLHttpRequest的伪实现,并提供几个接口来操作由它创建的对象。
还伪造本机XMLHttpRequest和ActiveXObject(如果可用,并且仅用于XMLHTTP progids)。帮助用XHR进行测试请求。
Node不使用XHR请求,因此Sinon不适用于此用例。我也希望它也能。
这是一个将其分解的问题:https://github.com/sinonjs/sinon/issues/1049
Nock是一个很好的替代方案,适用于Node:https://www.npmjs.com/package/nock