Ошибка скрипта (:0) при попытке запустить асинхронный тест в mocha-phantomjs
Я пытаюсь протестировать кусок асинхронного кода, но, к сожалению, я получаю неясный код ошибки и не могу понять, в чем проблема. Тест отлично работает в браузере, но запуск его в phantomjs приводит к:
Uncaught Script error. (:0)
Тест написан как модуль requirejs и зависит от другого модуля. Как я уже сказал, в браузере это работает нормально, а при отсутствии асинхронных тестов все отлично работает и в фантомах. Я использую phantomjs 1.9.12 и mocha-phantomjs 3.4.1.
define([ "csl" ], function( csl )
{
describe( "CSL", function()
{
it( "isLoggedIn", function( testCompleted )
{
csl.isLoggedIn().then( function( partner )
{
chai.expect( partner ).to.be.a( "object" );
testCompleted();
} )
.fail( function( error )
{
testCompleted( error );
} );
} );
} );
} );
1 ответ
Эту ошибку выдает mocha, когда в асинхронной функции есть исключение, и chai.expect может выдать ошибку AssertionError.
Вы можете воспроизвести ту же ошибку в браузере с простым таймаутом:
it("should fail async", function(done) {
window.setTimeout(function() {
"".should.not.equal("");
done();
})
})
Чтобы исправить это, вам нужно сообщить об ошибке с помощью обратного вызова, а не исключений:
it("should fail async with good error", function(done) {
window.setTimeout(function() {
if ("" == "") return done(new Error("Async error message"));
done();
})
})
it("should fail async with exception", function(done) {
window.setTimeout(function() {
try {
"".should.not.equal("");
}
catch (e) {
return done(e);
}
done();
})
})
Проблема не в самом фантоме (кроме того, что делает тест неудачным), но связь между исполнителем теста и фантомом делает все асинхронным, вызывая ошибку mocha.