"Ожидание" использовалось, когда не было текущей спецификации, это может быть связано с тем, что асинхронный тест был отключен в Jasmine 2.3.1
Я запускаю тестовые примеры кармы через gulp, как показано ниже:
gulp.task('unit-test-karma', function () {
return gulp.src(filePaths.libraryPaths.concat(filePaths.codePathsVerbose.concat(filePaths.testPaths).concat(filePaths.htmlPaths).concat(filePaths.jadePaths)))
//.pipe(plumber({ errorHandler: notify.onError(function(error) { console.log(error.message); return "Karma Error"; }) }))
.pipe(karma({
configFile: './karma.conf.js',
action: 'run', // watch
singleRun: true,
reporters: [ 'dots' ]
}));
});
Когда я запускаю действие как run
, IE 11 бросает ниже ошибки.
IE 11.0.0 (Windows 10 0.0.0) ERROR
'expect' was used when there was no current spec, this could be because an asynchronous test timed out
at C:/BbCAT-WebDI/BbCAT-Web/BbCAT-Angular/node_modules/jasmine-core/lib/jasmine-core/jasmine.js:938
Но если вы запускаете то же самое с действием как watch
, то все тестовые примеры успешно выполняются в chrome, IE и firefox.
После прочтения некоторого сообщения кажется, что есть некоторая проблема с вызовом службы $http, но не в состоянии найти, откуда именно проблема!
Ответы
Ответ 1
Это очень реальная проблема, и в настоящее время я испытываю это. Я думаю, что здесь есть основная ошибка. У меня очень хорошо инкапсулированные тесты. они маленькие (не более 3 строк каждый)
У меня есть основной раздел описания с 2 вложенными описаниями
сначала описать имеет 8 it() функций
второй имеет функции 3it().
то есть
describe("main", ()=>{
describe("1st", ()=>{
//here are 8 it() definitions
})
describe("2nd", ()=>{
//here are 3 it() definitions
})
})
Теперь, когда я удаляю одно определение it() из описания, проблема исчезает. В качестве альтернативы, если я добавлю третье описание(), проблема исчезнет.
Это проблема в жасмине - либо они неправильно сообщают об ошибке, либо что-то ужасно неправильно. В качестве альтернативы, это может быть карма, пытающаяся быть умной, одновременно запуская несколько тестов. В любом случае эта проблема реальна и не имеет ничего общего с грязным кодом.
Возможно, это связано с тестированием базовой единицы - моя функция рекурсивна (хотя мои тестовые примеры не погружаются глубоко).
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
Ответ 2
Если у вас такая же проблема, оказалось, что у меня был тест с setTimeout. Очистили это и все хорошо!
Ответ 3
Не могли бы вы вложить несколько тестов, которые нужно разделить, или иметь несколько асинхронных вызовов в одном и том же тестовом случае?
Я произвел ту же самую ошибку, но это было мое собственное дело. У меня было два асинхронных теста внутри одного из них(). Как только любой из promises разрешен, тест заканчивается. Другое обещание обещало осиротеть.
Рассмотрим эти фрагменты. Предположим, что тестируемая функция отвечает правильно, как вызвано.
Примечание. Я проигнорировал пути ошибок от then() для более четкой иллюстрации проблемы.
Эта конструкция не выполняется. Когда один из promises return and done() запущен, второй, который теперь не выполняется, "ожидание" использовалось, когда не было текущей ошибки... ".
describe( "delay", function(){
var calculator = new Calculator();
it( "delays execution - add and subtract", function(done){
delay( 1000, calculator, 'add', [ 10, 5 ] )
.then(function(result){
expect(result).toEqual( 15 );
done(); // <---- as soon as this runs, test is over
});
delay( 500, calculator, 'subtract', [ 9, 5 ] )
.then(function(result){
expect(result).toEqual( 4 );
done(); // <---- as soon as this runs, test is over
});
});
} );
Это правильный способ написать тесты. Каждое обещание инкапсулируется в собственном тесте.
describe( "delay", function(){
var calculator = new Calculator();
it( "delays execution - add", function(done){
delay( 1000, calculator, 'add', [ 10, 5 ] )
.then(function(result){
expect(result).toEqual( 15 );
done(); // <--- this is now the only resolution for this test
});
});
it( "delays execution - subtract", function(done){
delay( 500, calculator, 'subtract', [ 9, 5 ] )
.then(function(result){
expect(result).toEqual( 4 );
done(); // <--- this is now the only resolution for this test
});
});
} );
Поскольку у меня пока нет достаточной репутации, чтобы комментировать, я подаю свою просьбу здесь.: -)
Не могли бы вы пометить этот ответ как правильный, если это окажется вашей проблемой?