繁体   English   中英

Mocha / Chai异步测试'done()'fn无法正常工作

[英]Mocha/Chai async tests 'done()' fn not working

我正在测试我的银行模型如下:

describe('Bank Model - Ajax', function () {

    it('loads bank', function (done) {

        var bank = new Bank();

        bank.OnLoaded = _(function () {
            expect(this.id).to.eql(1171);
            expect(true).to.eql(false);
            done();
        }).bind(bank);

        bank.load(1171);


    });
});

加载调用向我的服务器发出ajax请求。 我的问题是expect(true).to.eql(false); 抛出一个Uncaught Assertion Error ,我不知道为什么。 我正在使用推荐的Mocha策略来结束我的测试用例。 我做错了吗?

谢谢。

你没有做错任何事。 Mocha不容易捕获回调中抛出的异常,因为它们在测试函数完成后执行,因此任何失败的断言都是未捕获的致命错误,而不是通常用同步代码获得的好差异。

人们正在研究解决方法,例如提供断言库可以调用而不是抛出的自定义方法 ,或者在Node中运行时使用节点域 但就目前看来,它仍然没有理想的表现。

由于done方法接受包含错误的单个参数,因此您可以向测试添加代码以捕获回调中的异常并将它们传递给catch块内的done(err) 但它快速变得非常混乱。

可以通过以下某种辅助函数减少重复:

function catching(done, fn) {
  try {
    fn();
    done();
  } catch(err) {
    done(err);
  }
}

然后:

bank.OnLoaded = catching(done, _(function () {
  expect(this.id).to.eql(1171);
  expect(true).to.eql(false);
}).bind(bank));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM