Нижеприведенный фрагмент 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() для этой группы тестов, что, кстати, было тем, что я в любом случае имел в виду, но я думаю, что либо документы нуждаются в уточнении, либо исследование сообщения об ошибке :)
Ваше здоровье,
Алекс
+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()"; если вы возвращаете обещание, убедитесь, что оно разрешено.
Самый полезный комментарий
Для потомков вы можете использовать функции стрелок и установить время ожидания следующим образом: