2017-11-11 179 views
0

尝试首次使用Sinon,因为它的假服务器功能让我存根API响应。测试本身是为摩卡书写的Sinon假服务器不拦截请求

但是,假的服务器似乎不会拦截请求。

代码:

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的URL,从而导致错误的地址不存在...

任何想法,我做错了...?谢谢!

回答

1

在Sinon GitHub存储库中有几个关于这个问题。 Sinon的假服务器:

提供XMLHttpRequest的假实现,并提供几个接口来操作由它创建的对象。

还假冒原生XMLHttpRequest和ActiveXObject(当可用时,并且仅用于XMLHTTP progs)。帮助XHR提出测试请求。

节点没有使用XHR请求,所以Sinon不适用于此用例。我也希望它也能做到。

下面是休息下来的一个问题:https://github.com/sinonjs/sinon/issues/1049

诺克是与节点的工作一个很好的选择:https://www.npmjs.com/package/nock

+0

尔加。从来没有想过一起谷歌假服务器和节点...谢谢! –