2014-10-08 102 views
3

我在當前沒有測試的函數中有一個分支。這是一個來自request操作的錯誤處理程序(使用同名的節點模塊)。下面是具體的行:使用Nock和請求模擬HTTP請求錯誤

request(url, function (error, response, body) { 
    if (error) return cb(error); 

這裏是測試:

describe("handles errors", function() { 
    it("from the request", function (done) { 
    var api = nock('http://football-api.com') 
       .get('/api/?Action=today&APIKey=' + secrets.APIKey + '&comp_id=1204') 
       .reply(500); 

    fixture.getFixture(FixtureMock, function (err, fixture) { 
     expect(err).to.exist 
     done(); 
    }); 
    }); 

規格失敗:

Uncaught AssertionError: expected null to exist 

因此,無論發送500狀態代碼作爲迴應,沒有身體不在請求回調中導致error,或者我測試了錯誤的東西。

+0

此問題的結尾有可能返回錯誤。 https://github.com/pgte/nock/issues/164 – 2014-10-08 05:33:06

回答

0

唯一發現的解決方法是模擬超時

nock('http://service.com').get('/down').delayConnection(500).reply(200) 
unirest.get('http://service.com/down').timeout(100).end(function(err) { 
    // err = ETIMEDOUT 
}); 

source

7

使用replyWithError從DOC:

nock('http://www.google.com') 
    .get('/cat-poems') 
    .replyWithError('something awful happened'); 
0

的@ PiotrFryga的回答爲我工作,因爲我的要求callback(err, resp, body)這種變異實際上是在檢查「ETIMEDOUT」錯誤代碼err

nock('http://www.google.com') 
    .get('/cat-poems') 
    .replyWithError({code: "ETIMEDOUT"});