Как установить тайм-аут на крючок в мокко?

Я хочу установить значение тайм-аута до того, как подключиться к тестовым случаям мокко. Я знаю, что могу сделать это, добавив -t 10000 в командной строке mocha, но это изменит каждое значение тайм-аута теста. Я хочу найти способ изменить таймаут программно ниже, это мой код:

describe('test  ', () => {

  before((done) => {
        this.timeout(10000);
         ...

он будет жаловаться на строку this.timeout(1000), что timeout не определен. Как установить тайм-аут до перехвата.

Ответ 1

Вам нужно установить тайм-аут в вашем блоке describe, а не на крючке, если вы хотите, чтобы он повлиял на все тесты в describe. Однако вам нужно использовать "регулярную" функцию как обратный вызов describe, а не функцию стрелки:

describe('test', function () {
  this.timeout(10000);

  before(...);

  it(...);
});

Во всех местах, где вы хотите использовать this в обратном вызове, вы переходите к Mocha, вы не можете использовать функцию стрелки. Вы должны использовать "регулярную" функцию, которая имеет свое собственное значение this, которое может быть установлено Mocha. Если вы используете функцию стрелки, значение this будет не таким, каким хочет Mocha, и ваш код не удастся.

Вы можете установить другой тайм-аут для своего до крючка, но есть две вещи, которые следует учитывать:

  • Здесь также вам нужно использовать "регулярную" функцию, а не функцию стрелки, поэтому:

    before(function (done) { 
      this.timeout(10000);
    
  • Это установит тайм-аут только для крюка before и не повлияет на ваши тесты.

Ответ 2

Вы также можете вызвать timeout() для возвращаемого значения из describe, например:

describe('test', () => {
  before(...);
  it(...);
}).timeout(10000);

При таком подходе вы можете использовать функции стрелок, потому что вы больше не полагаетесь на this.

Ответ 3

Вызов this.timeout(milliseconds); в перед крючком правильно. В любом случае, вам нужно использовать обычную функцию для ловушки (function (done)...), а не функцию стрелки (done =>...).

before(
    function(done) {
        this.timeout(10000);
        ...
    }
);

И причина в том, что функции стрелок не имеют this привязки.