摩卡节点:如何使用assert.rejects()?

问题描述 投票:1回答:1

我试着按照 文件 以便使用assert.rejects测试错误信息(我确实有高于v10的Node)。

但它总是通过,即使是一个可笑的消息。我到底做错了什么?

it("should fail but it's not", 
  async ()=> {
    let itemId = 'not an id'
    assert.rejects( 
      await ListRepo.checkById(itemId),
      {message: 'abracadabra'}                        
    )
  }
)

UPDATE:似乎如果我返回assert.rejects,它就会工作。但我还是不知道原因。

promise mocha node-assert
1个回答
0
投票

nicholaswmin说的是正确的,但这里有一个 "猫头鹰的休息 "的时刻,我想澄清一下。

如果你的愿望是 "我想断言拒绝" "我想确保这段代码以正确的方式拒绝",这个模式有点复杂。

首先,写进 return fxnWhichReturnsPromise(). 如果你的函数是拒绝的,那么测试就会失败,而你要的是反过来的。你必须使用两个参数的签名,即 .then(),它看起来像。.then(onFulfillCallback, onRejectCallback),因为如果你把它分成 .then & .catch,未能在 .then-块将被后续的 .catch-块,本应是失败的测试(它没有拒绝)将成为合格的测试。

在实践中,总共看起来是这样的。

it('rejects when given foobar', () => {
  return fxnThatShouldReject(foobar)
    .then(
      (val) => { assert.fail(`Should have rejected, returned with ${val} instead`)
      ,
      (err) => { assert.equal(err.message, "Rejection reason I was expecting") }
    )
}) 

断言库没有内置的断言处理程序的原因是,能够在测试套件中 "暂停 "异步执行,其实是测试运行器的一种能力。assert.throws() 相比之下,是同步的。

© www.soinside.com 2019 - 2024. All rights reserved.