Mocha: this.timeout() внутри описать() у меня не работает

Созданный на 19 мар. 2013  ·  17Комментарии  ·  Источник: mochajs/mocha

Нижеприведенный фрагмент JS взят из документации веб-сайта mocha.js «Тайм-ауты для конкретных наборов»:

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

Этот пример кода немного сбивает с толку, когда я помещаю вызов "this.timeout()" следующим образом, я получаю:

C:\Dev\GitHub\alexlatchford\adfuser\src\test\api\v1\target_groups.js:274
                this.timeout(0); // Extend the timeout for this suite because we're insertin
                     ^
TypeError: Object #<Object> has no method 'timeout'
    at C:\Dev\GitHub\alexlatchford\adfuser\src\test\api\v1\target_groups.js:274:8
    at module.exports.suite.on.context.describe.context.context (C:\Users\alatchford\AppData\Roaming\npm\node_modules\mocha\lib\interfaces\bdd.js:72:7)
    at C:\Dev\GitHub\alexlatchford\adfuser\src\test\api\v1\target_groups.js:272:2
    at module.exports.suite.on.context.describe.context.context (C:\Users\alatchford\AppData\Roaming\npm\node_modules\mocha\lib\interfaces\bdd.js:72:7)
    at Object.<anonymous> (C:\Dev\GitHub\alexlatchford\adfuser\src\test\api\v1\target_groups.js:15:1)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:362:17)
    at require (module.js:378:17)
    at Mocha.loadFiles (C:\Users\alatchford\AppData\Roaming\npm\node_modules\mocha\lib\mocha.js:137:27)
    at Array.forEach (native)
    at Mocha.loadFiles (C:\Users\alatchford\AppData\Roaming\npm\node_modules\mocha\lib\mocha.js:134:14)
    at Mocha.run (C:\Users\alatchford\AppData\Roaming\npm\node_modules\mocha\lib\mocha.js:278:31)
    at Object.<anonymous> (C:\Users\alatchford\AppData\Roaming\npm\node_modules\mocha\bin\_mocha:324:7)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)
    at process.startup.processNextTick.process._tickCallback (node.js:245:9)

Это работает, если я поместил его в свой метод before() для этой группы тестов, что, кстати, было тем, что я в любом случае имел в виду, но я думаю, что либо документы нуждаются в уточнении, либо исследование сообщения об ошибке :)

Ваше здоровье,
Алекс

Самый полезный комментарий

Для потомков вы можете использовать функции стрелок и установить время ожидания следующим образом:

it('some test', (done) => {
    // ...
}).timeout(5000);

Все 17 Комментарий

+1

У меня такая же проблема с хуком "прежде всего". Он захватывает тайм-аут, который я указал глобально, вместо того, который указан в функции с this.timeout(2000);

Привет ты там? Кто-нибудь может это исправить? Я обнаружил два места в коде, где это проблема, вероятно, - методы тайм-аута, вызывающие другие методы тайм-аута, но не выполняющие apply(this, arguments) , а передавая первый вручную, тем самым убивая семантику if length === 0 readTheValue .

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

+1

я думаю, что я недавно исправил это. ваш код тоже сработал для меня:

describe('something', function(){
  this.timeout(500);

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

  it('should take less than 500 too', function(done){
    setTimeout(done, 200);
  });
})
🍕  mocha


  something
    ✓ should take less than 500 (301ms)
    ✓ should take less than 500 too (201ms)


  2 passing (510ms)

@travisjeffery ,

я проголосовал за это

У меня такая же проблема с хуком "прежде всего".

все

before(function(){
  this.timeout(500);
})

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

  it('should take less than 500 too', function(done){
    setTimeout(done, 200);
  });
})
beforeEach(function(){
  this.timeout(500);
})

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

  it('should take less than 500 too', function(done){
    setTimeout(done, 200);
  });
})
describe('something', function(){  
  beforeEach(function(){
    this.timeout(500);
  })

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

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

возвращает это

mocha --version
   1.20.1

mocha --timeout 100

  something
    1) should take less than 500
    2) should take less than 500 too


  0 passing (215ms)
  2 failing

  1) something should take less than 500:
     Error: timeout of 100ms exceeded

  2) something should take less than 500 too:
     Error: timeout of 100ms exceeded

мои ожидания, что 500 должны применяться для каждого теста

Мне создать отдельную тему?

хорошо, тогда я закрою это. надеюсь, вы можете заняться созданием PR, а не проблемой для перед.

Пожалуйста, снова откройте , $# ms this.timeout() по-прежнему не работает, см. аргументы всегда равны 1 по сравнению с https://github.com/visionmedia/mocha/blob/master/lib/runnable.js#L66 , что никогда не может быть истинным и возвращать значение.

случай, когда это не удастся, - это если вы получаете значение тайм-аута, не устанавливая его

Да, это то, с чем у меня была проблема в первую очередь.

«Доктор Трэвис Джеффри» [email protected]ísal/a :

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

@herby исправлено в #1282

@travisjeffery спасибо

к вашему сведению, все еще вижу это в 3.1.2

describe('something', () => {
  this.timeout(5000);
  it('should work', done => {
    setTimeout(done, 2000);
  });
});

@JacobRodriguezSSI Используя функцию стрелки, вы не используете значение this , переданное для описания обратного вызова. Вместо этого вы должны использовать обычную функцию.

@AgentME : Ты прав, извини. В спешке я не увидел другой проблемы , указывающей на этот факт.

Для потомков вы можете использовать функции стрелок и установить время ожидания следующим образом:

it('some test', (done) => {
    // ...
}).timeout(5000);

@travisjeffery я использовал приведенный ниже скрипт, но получил ту же ошибку превышения времени ожидания.

Мой сценарий:

описать("getBillingDetail", асинхронная функция (){
этот.тайм-аут(55000);
it.only("проверить правильное имя задания",асинхронная функция (выполнено){
этот.тайм-аут(55000);
var result = await url.getBillingDetail('12254785565647858');
console.log(результат);
утверждать.равно(результат,истина);
});
});

Ошибка: превышено время ожидания 55000 мс. Для асинхронных тестов и перехватчиков убедитесь, что вызывается "done()"; если вы возвращаете обещание, убедитесь, что оно разрешено.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги