Я передаю сетевой запрос в тестовом примере, но иногда это занимает более 2 секунд (по умолчанию - тайм-аут).
Как увеличить время ожидания для одного тестового примера?
Я передаю сетевой запрос в тестовом примере, но иногда это занимает более 2 секунд (по умолчанию - тайм-аут).
Как увеличить время ожидания для одного тестового примера?
Здесь вы найдете: http://mochajs.org/#test-level
it('accesses the network', function(done){
this.timeout(500);
[Put network code here, with done() in the callback]
})
Функция стрелок используется следующим образом:
it('accesses the network', (done) => {
[Put network code here, with done() in the callback]
}).timeout(500);
Если вы хотите использовать функции стрелок es6, вы можете добавить .timeout(ms)
в конец вашего определения it
:
it('should not timeout', (done) => {
doLongThing().then(() => {
done();
});
}).timeout(5000);
По крайней мере, это работает в Typescript.
(так как я столкнулся с этим сегодня)
Будьте осторожны при использовании синтаксиса жира ES2015:
Это не удастся:
it('accesses the network', done => {
this.timeout(500); // will not work
// *this* binding refers to parent function scope in fat arrow functions!
// i.e. the *this* object of the describe function
done();
});
РЕДАКТИРОВАТЬ: Почему это не удается:
Поскольку @atoth упоминает в комментариях, функции стрелок жира не имеют своей привязки. Поэтому невозможно, чтобы его функция связывалась с этим обратным вызовом и предоставляла функцию тайм-аута.
Нижняя строка: не используйте функции стрелок для функций, требующих повышенного времени ожидания.
Если вы используете в NodeJS, вы можете установить таймаут в package.json
"test": "mocha --timeout 10000"
то вы можете запустить с помощью npm, например:
npm test
Из командной строки:
mocha -t 100000 test.js
Вы также можете подумать о другом подходе и заменить вызов сетевого ресурса заглушкой или макетным объектом. Используя Sinon, вы можете отделить приложение от сетевой службы, сосредоточив свои усилия на развитии.
Для тестирования на Express
:
const request = require('supertest');
const server = require('../bin/www');
describe('navegation', () => {
it('login page', function(done) {
this.timeout(4000);
const timeOut = setTimeout(done, 3500);
request(server)
.get('/login')
.expect(200)
.then(res => {
res.text.should.include('Login');
clearTimeout(timeOut);
done();
})
.catch(err => {
console.log(this.test.fullTitle(), err);
clearTimeout(timeOut);
done(err);
});
});
});
В этом примере время тестирования составляет 4000 (4 с).
Примечание: setTimeout(done, 3500)
является второстепенным, чем done
вызывается во время теста, но clearTimeout(timeOut)
он избегает, чем используется все это время.
Это сработало для меня! Не удалось найти что-нибудь, с чем можно было бы поработать раньше()
describe("When in a long running test", () => {
it("Should not time out with 2000ms", async () => {
let service = new SomeService();
let result = await service.callToLongRunningProcess();
expect(result).to.be.true;
}).timeout(10000); // Custom Timeout
});
Хорошо использую TypeScript и использую async/wait. Вот моя проблема:
it().timeout()
кажется, не работает (проблема с типом)Взял меня, когда понял, что когда вы вернете обещание, мокка будет нормально ждать теста.
it("Should not timeout", function(){
this.timeout(5000);
return new Promise((resolve, reject) => {
})
})