2

我正在尝试测试一段异步代码,但遗憾的是我得到了一个模糊的错误代码,我似乎无法弄清楚问题是什么。测试在浏览器中运行良好,但在 phantomjs 中运行会导致:

Uncaught Script error. (:0)

该测试被编写为一个 requirejs 模块,并且依赖于另一个模块。就像我说的那样,这在浏览器中运行良好,并且当不进行异步测试时,在 phantomjs 中一切正常。我正在使用 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 );
          } );
      } );
  } );
} );
4

1 回答 1

4

这就是 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 错误。

于 2015-05-03T03:49:33.587 回答