Как увеличить тайм-аут для одного тестового примера в мокко

Я передаю сетевой запрос в тестовом примере, но иногда это занимает более 2 секунд (по умолчанию - тайм-аут).

Как увеличить время ожидания для одного тестового примера?

Ответ 1

Здесь вы найдете: 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);

Ответ 2

Если вы хотите использовать функции стрелок es6, вы можете добавить .timeout(ms) в конец вашего определения it:

it('should not timeout', (done) => {
    doLongThing().then(() => {
        done();
    });
}).timeout(5000);

По крайней мере, это работает в Typescript.

Ответ 3

(так как я столкнулся с этим сегодня)

Будьте осторожны при использовании синтаксиса жира 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 упоминает в комментариях, функции стрелок жира не имеют своей привязки. Поэтому невозможно, чтобы его функция связывалась с этим обратным вызовом и предоставляла функцию тайм-аута.

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

Ответ 4

Если вы используете в NodeJS, вы можете установить таймаут в package.json

"test": "mocha --timeout 10000"

то вы можете запустить с помощью npm, например:

npm test

Ответ 5

Из командной строки:

mocha -t 100000 test.js

Ответ 6

Вы также можете подумать о другом подходе и заменить вызов сетевого ресурса заглушкой или макетным объектом. Используя Sinon, вы можете отделить приложение от сетевой службы, сосредоточив свои усилия на развитии.

Ответ 7

Для тестирования на 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) он избегает, чем используется все это время.

Ответ 8

Это сработало для меня! Не удалось найти что-нибудь, с чем можно было бы поработать раньше()

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 
});

Ответ 9

Хорошо использую TypeScript и использую async/wait. Вот моя проблема:

  • Я думал, что "должен" использовать функцию стрелки для работы с async/await
  • it().timeout() кажется, не работает (проблема с типом)

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

it("Should not timeout", function(){
  this.timeout(5000);
  return new Promise((resolve, reject) => {

  })
})