涉及knex交易的Mocha单元测试

Mocha Unit test involving knex transaction

本文关键字:Mocha 单元测试 交易 knex 涉及      更新时间:2023-09-26

我有下面的单元测试

knex.transaction(function(trx) {
  wrapperobj.insertData(trx, (err, res) => {
    if (err) {
      return done(err);
    }
     expect(result.rowCount).to.be.equal(2); //fails, rowcount is 1
     trx.rollback(new Error('rollback'));  
  })
})
.asCallback((err, result) = > {
  expect(err).to.match(/rollback/);
  done();
});

它打印了2个失败1) 未捕获断言错误:应为1等于2。这是意料之中的事。2) "每个之后"挂钩。。。错误:超过了2000ms的超时时间。请确保在该测试中调用了done()回调。

如何防止第二条失败消息

我可以像下面这样到处放try-catch,但看起来不整洁

knex.transaction(function(trx) {
  wrapperobj.insertData(trx, (err, res) => {
        try {
          expect(err).to.be.null;
          expect(result).not.to.be.empty;
          expect(result.rowCount).to.be.equal(2);
        }
        catch(err1) {
            done(err1);
        }
        trx.rollback(new Error('rollback'));
      })
      .asCallback((err, result) => done())

这可能不是问题的根源,但您可以通过在运行mocha命令进行测试时添加标志--timeout 15000来增加默认超时,更理想的情况是在mocha.opts配置文件中添加标志;用你喜欢的毫秒数(这将其设置为15000或15秒。来自文档:

-t、 --超时

指定测试用例超时,默认为2秒。覆盖您可以以毫秒为单位传递超时,或者一个后缀为s的值,例如:--timeout 2s或--timeout 2000将是等效的。