Я надсилаю мережевий запит у тестовому випадку, але іноді це займає більше 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);
before(function(done){this.timeout(5 * 1000);...});
.timeout(500)
до кінцяit(...).timeout(500)
Якщо ви бажаєте скористатися функціями стрілки es6, ви можете додати .timeout(ms)
до кінця свого it
визначення:
it('should not timeout', (done) => {
doLongThing().then(() => {
done();
});
}).timeout(5000);
Принаймні, це працює в Typescript.
.timeout
не входить до типових наборів для mocha: i.imgur.com/jQbWCn1.png - Використання this.timeout(2000)
або this.slow(500)
зі звичайною старою функцією працює і збирається без помилок
it
, але не працює describe
.
describe()
або context()
?
.timeout
тепер включений в Мокко типізації DefinitelyTyped за адресою: Mocha.IRunnable
. Однак якщо для запуску цих тестів ви використовуєте IDE Webstorm IDE, будьте обережні: з будь-якої причини плагін інтеграції Mocha WebStorm все ще не розпізнає .timeout()
додані тести Mocha (це означає, що поруч із ними не з’являється кнопка "запустити"), і, отже, я прихиляюсь уникати функцій стрілок, щоб дозволити їх використання this.timeout()
.
(оскільки я сьогодні зіткнувся з цим)
Будьте обережні, використовуючи синтаксис жирної стрілки 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();
});
EDIT: Чому це не вдається:
Як @atoth згадує в коментарях, жир стрілок функція не має свої власний це зв'язування. Тому функція it не може прив'язуватися до цього зворотного дзвінка та надавати функцію тайм-ауту .
Підсумок : не використовуйте стрілочні функції для функцій, які потребують збільшення часу.
this
прив'язки до функцій стрілок - не однаковий спосіб підказав би, що вони мають якісь, просто різні. Вони мають лише лексичні сфери застосування. Ви не можете зв'язати це неіснуюче. Ось чому .bind
і .call
т. Д. Не працює з цим.
this
є.
Якщо ви використовуєте в NodeJS, тоді ви можете встановити тайм-аут у package.json
"test": "mocha --timeout 10000"
тоді ви можете запустити за допомогою npm, наприклад:
npm test
Ви також можете подумати про інший підхід та заміну дзвінка на мережевий ресурс на об'єкт заглушки або макету. Використовуючи 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 (4s).
Примітка: 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
});