Node.js Sinon假服务器未拦截请求

Node.js Sinon假服务器未拦截请求,node.js,sinon,Node.js,Sinon,第一次尝试使用Sinon,因为它的假服务器功能允许我存根API响应。测试本身是为摩卡咖啡编写的 然而,假服务器似乎没有拦截请求 代码: 作为参考,PushMessage是一个具有静态属性serverUrl的对象。我只是将该值设置为一个假URL,然后将其重置。 notify函数使用PushMessage的静态属性中设置的serverUrl的本机请求承诺生成post消息 似乎正在发生的是,POST请求最终被正确地针对http://a.fake.server/api/notificationmanag

第一次尝试使用Sinon,因为它的假服务器功能允许我存根API响应。测试本身是为摩卡咖啡编写的

然而,假服务器似乎没有拦截请求

代码:

作为参考,PushMessage是一个具有静态属性serverUrl的对象。我只是将该值设置为一个假URL,然后将其重置。 notify函数使用PushMessage的静态属性中设置的serverUrl的本机请求承诺生成post消息

似乎正在发生的是,POST请求最终被正确地针对http://a.fake.server/api/notificationmanager/messages,导致地址不存在的错误


知道我做错了什么吗。。。?谢谢

关于这一点,Sinon GitHub存储库中出现了几个问题。Sinon的假服务器:

提供XMLHttpRequest的伪实现,并提供多个用于操作由其创建的对象的接口

在可用时,还伪造本机XMLHttpRequest和ActiveXObject,并且仅用于XMLHttpProgID。帮助测试使用XHR发出的请求

Node不使用XHR请求,因此Sinon不适用于此用例。我也希望如此

这里有一个问题可以将其分解:


Nock是一个很好的替代方案,可以与Node:

Gah一起使用。从来没有想过谷歌假服务器和节点一起。。。谢谢
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();
    })
});