Sinon假服务器没有拦截请求

时间:2017-11-11 14:02:43

标签: node.js sinon

第一次尝试使用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的网址进行正确尝试,从而导致地址不存在的错误...

知道我做错了什么......?谢谢!

1 个答案:

答案 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