2016-04-10 7 views
2

Как принудительно использовать ETIMEDOUT с помощью nock (https://github.com/node-nock/nock) и request?
Я пробовал следовать, где nock будет откладывать отклик на 8000 миллисекунд, тогда как время ожидания для запроса будет установлено в 5000 миллисекунд, поэтому я ожидаю увидеть ETIMEDOUT, но это не тот случай. Код будет возвращать then block should not execute: Hello from Google!Как использовать ETIMEDOUT с помощью колодки и библиотеки запросов

тест мокко/форс-REQ-timeout.test.js --timeout = 10000

'use strict' 

const expect = require('chai').expect 
const nock = require('nock') 
const rp = require('request-promise') 

describe('force request timeout with nock',() => { 
    it('should return ETIMEDOUT', (done) => { 

    nock('http://www.google.com') 
    .get('/') 
    .delay(8000) 
    .reply(200, 'Hello from Google!') 

    rp({ 
     url: 'http://www.google.com', 
     timeout: 5000 
    }) 
    .then((data) => { 
     console.log('then block should not execute: ', data) 
    }) 
    .catch((err) => { 
     expect(err.cause.code).to.equal('ETIMEDOUT') 
     return done() 
    }) 
    }) 
}) 

ответ

0

Это работает для меня. Только я не использую npm rp, но npm-запрос.

1

В конце концов я решил его с:

nock('http://www.google.com') 
    .get('/') 
    .replyWithError({code: 'ETIMEDOUT'}) 

Который выглядит чистым, оно не связано с delay и прочее, и, как мне кажется, достаточно, чтобы имитировать ETIMEDOUT, имея в виду, что им с помощью request-promise Lib, где им проверки ETIMEDOUT нравится: if (err.error && err.error.code === 'ETIMEDOUT')

+0

Есть два типа таймаутов, ETIMEDOUT и ESOCKETTIMEDOUT. Чтобы сделать его более реалистичным, ожидая, когда команда Nock будет исправлена, добавьте connect: true или connect: false соответственно. –

 Смежные вопросы

  • Нет связанных вопросов^_^