mocha,nodejs承诺测试无法完成,因为缺乏完成

时间:2017-10-20 01:20:08

标签: javascript node.js mocha chai

我试图对承诺进行测试,但测试失败,认为它超出了超时限制,并建议确保我已完成条款。

这是我测试代码的一部分:

$configurations
    .updateConfiguration(configurations_driver.NOT_VALID_MODEL) //invalid model
    .then(function () {
        done(new Error("Expected INVALID_MODEL error but got OK"));
    }, function (error) {
        chai.assert.isNotNull(error);
        chai.expect(error.message).to.be.eq("INVALID_MODEL_ERROR");
        chai.expect(error.kind).to.be.eq("ERROR_KIND");
        chai.expect(error.path).to.be.eq("ERROR_PATH");
        done();
    })
    .catch(done);
});  

我可以看到所有已完成的条款,所以我不知道我是否在测试中遗漏了某些内容,或者结构是错误的。

1 个答案:

答案 0 :(得分:4)

只要您done承诺,Mocha就支持在不使用return的情况下测试承诺。

const expect = chai.expect

it('should error', function(){
  return $configurations
    .updateConfiguration(configurations_driver.NOT_VALID_MODEL) //invalid model
    .then(()=> { throw new Error("Expected INVALID_MODEL error but got OK")})
    .catch(error => {
      expect(error).to.not.be.null;
      expect(error.message).to.equal("INVALID_MODEL_ERROR");
      expect(error.kind).to.equal("ERROR_KIND");
      expect(error.path).to.equal("ERROR_PATH");
    })
})

另请参阅chai-as-promised以使承诺测试更像标准的chai断言/期望。

chai.should()
chai.use(require('chai-as-promised'))

it('should error', function(){
  return $configurations
    .updateConfiguration(configurations_driver.NOT_VALID_MODEL)
    .should.be.rejectedWith(/INVALID_MODEL_ERROR/)
})

在Node 7.6+环境中或您拥有babel / babel-register的位置,您还可以使用async / await承诺处理程序

it('should error', async function(){
  try {
    await $configurations.updateConfiguration(configurations_driver.NOT_VALID_MODEL)
    throw new Error("Expected INVALID_MODEL error but got OK")})
  } catch (error) {
    expect(error).to.not.be.null;
    expect(error.message).to.equal("INVALID_MODEL_ERROR");
    expect(error.kind).to.equal("ERROR_KIND");
    expect(error.path).to.equal("ERROR_PATH");
  }
})