如何通过针对Node.js的Mocha测试修复Promise AssertionError

时间:2019-02-01 10:01:25

标签: node.js mocha assert

我是NodeJS编程和Mocha测试的新手。

我正在尝试使用Promise.resolve创建一个摩卡测试用例,并抛出错误 但是assert.throw不能使用它

我尝试过函数(断言)[https://nodejs.org/api/assert.html#assert_assert_throws_fn_error_message]

index.js

def som(start, stop, base): ## base is a list of the numbers you want to use as possible base.
  n = 0
  for i in range(start, stop):
    for b in base:
      if i % b == 0: ## if any match is encountered add 1 and break out of the loop.
        n += 1
        break
  print("there are", n, "multiples of any number in", base, " between", start, "and", stop, ".")

index.test.js

    const reqData = JSON.parse(data);
    return Promise.resolve()
        .then(() => {
            if(reqData){
                throw new Error(
                  'This new error thows!'
                );
            }

            console.log('It works!!');
        })
        .then(() => {
                console.log('work completed');
            }
        )
}

行等待assert.throw给出错误

  

AssertionError [ERR_ASSERTION]:缺少预期的异常(错误)。

提前谢谢

1 个答案:

答案 0 :(得分:0)

assert.throws需要一个引发错误的函数。这与被拒绝的承诺不同,后者基本上是一个对象。

另一个问题是函数不会返回getResult(data) promise。

断言实际上并不检查错误是否有This new error thows!,而是在失败时导致此消息的错误。

assert在节点10和更高版本的supports promises中。应该是:

await assert.rejects(
    () => getResult(data),
    {
      constructor: Error,
      message: 'This new error thows!'
    },
    'Promise not rejected'
);