2017-11-11 322 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

爾加。從來沒有想過一起谷歌假服務器和節點...謝謝! –