Ошибка скрипта (: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.

Другие вопросы по тегам