2016-04-28 6 views
3

Здесь я прикрепляю свой код, я передаю обратный вызов и используя supertest для запроса. Поскольку я использую assert/expect в своем тестовом файле внутри блока request.end, почему мне нужно беспокоиться о тайм-ауте? Что я здесь делаю.Как избежать тайм-аутов в мокко-тестах?

it('should get battle results ', function(done) { 
    request(url) 
     .post('/compare?vf_id='+vf_id) 
     .set('access_token',access_token) 
     .send(battleInstance) 
     .end(function(err, res){ // why need timeout 
     if (err) return done(err); 
     console.log(JSON.stringify(res.body)); 
     expect(res.body.status).to.deep.equal('SUCCESS'); 
     done(); 
     }); 
}); 

результаты TestCase следующие реакции: Ошибка: тайм-аут 2000 мс превышен. Убедитесь, что в этом тесте вызывается обратный вызов done().

Если я запускаю свои тестовые файлы с помощью команды mocha, тогда ее показать эту ошибку, а если я выполняю тест mocha --timeout 15000, тогда тестовый тест проходит правильно. Но я хочу избежать тайм-аута, как я могу это сделать?

+0

Возможный дубликат [Изменить тайм-аут по умолчанию для мокко] (http://stackoverflow.com/questions/23492043/change-default-timeout-for-mocha) – Louis

ответ

3

If I am running my testcases with mocha command then its show this error while If I am running test mocha --timeout 15000 then testcase is passing correctly. But I want to avoid timeout, How can I do that?

Вы не можете избежать таймаута, так как она выглядит, как вы тестируете удаленный сервис. Если по какой-либо причине запрос на эту услугу занимает много времени, вы получите .

Вы можете указать Mocha отключить проверку тайм-аута, установив тайм-аут на 0, но это, вероятно, также не идеально, потому что это может привести к тому, что каждый тестовый пример займет слишком много времени.

В качестве альтернативы, вы можете издеваться request (который я предполагаю, что это superagent), так что вы можете контролировать весь запрос HTTP поток/ответ, но так как он выглядит, как вы тестируете удаленного службы (тот, который у вас есть без контроля), что сделало бы этот конкретный тестовый вопрос спорным.

+0

Хорошо, но если я не могу избежать тайм-аутов, то как я буду знать, сколько времени я должен соблюдать, я не могу ударить и проверять каждый раз, когда я пишу тестовый файл, а также зависит от скорости сети, я думаю? ». Итак, какой-либо общий подход к тестированию этих сервисов? –

+0

Единственное, что вы можете сделать, это установить верхний предел времени ожидания (например, 5 минут) или полностью отключить их. Но поскольку вы в основном тестируете внешнюю службу, не существует общего решения для _avoid_ тайм-аутов. – robertklep

+0

Еще одно сомнение в том, что, поскольку мы используем assertion like expect (а также передаем завершенный обратный вызов) в request.end(), значит, это означает, что обратный вызов должен быть передан после получения ответа. не так ли? Я имею в виду следующую часть кода. .end (функция (err, res) {// зачем нужен тайм-аут if (err) return done (err); console.log (JSON.stringify (res.body)) ожидаем (res.body. статус) .to.deep.equal («УСПЕХ»); done(); }); –

0

Вот что вам нужно

mocha timeouts

describe('a suite of tests', function() { 
    this.timeout(500); 

    it('should take less than 500ms', function(done){ 
    setTimeout(done, 300); 
    }); 

    it('should take less than 500ms as well', function(done){ 
    setTimeout(done, 250); 
    }); 
}) 
1

В мокко таймаут по умолчанию 2 секунды (2000ms) устанавливается по умолчанию.

Вы можете увеличить интервал по умолчанию (глобальный) из командной строки, используя флаг --timeout xxxx.

Если вы хотите, вместо того, чтобы изменить тайм-аут для конкретного теста вы можете использовать функцию this.timeout(xxxx) (где xxxx представляет собой число, как 20000 представляющих миллисекунды).

it('My test', function(){ 
    this.timeout(5000); 
    //... rest of your code 
}); 

Вы также можете установить тайм-аут набора тестов (обернут describe):

describe("My suite", function(){ 
    // this will apply for both "it" tests 
    this.timeout(5000); 

    it("Test 1", function(){ 
    ... 
    }); 

    it("Test 2", function(){ 
    ... 
    }); 

}); 

Он также работает для before, beforeEach, after, afterEach блоков.

документация находится здесь: https://mochajs.org/#timeouts

Считают, что 2-х секунд, как правило, хорошее количество времени, чтобы запустить тесты, так что я хотел бы сказать, что продлить время ожидания по умолчанию должно быть исключением, а не общим правилом в вашем тесты. Также, если ваш тест не является асинхронным, и вы должны продлить таймаут, я настоятельно рекомендую рассмотреть функцию, которая занимает так много времени, прежде чем продлить таймаут.

+0

Отличный ответ и мудрый совет - «поэтому я бы сказал, что продлить таймаут по умолчанию должен быть исключением, а не общим правилом в ваших тестах ». Разочарование, которое ответили более года назад, и не голосовали. Действительно ли * действительно * проверяет их материал в гневе или все мы все еще пинаем шины? – jmc

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

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