单元测试失败的承诺

时间:2018-06-26 18:11:56

标签: javascript node.js promise es6-promise chai

我是异步编程的新手。我正在为以下示例代码编写测试用例。

someAsync(text) {
  try {
    //do something and resolve result
    return Promise.resolve(result);
  } catch (err) {
    return Promise.reject(new Error(`Failure ${err}`));
  }
}

我正在使用以下代码对其进行测试:

it('should throw error when called', (done) => {
  const mymodule = new MyModule(args);
  mymodule.someAsync('something that causes failure').catch((err) => {
    expect(err).to.exist;
    expect(err.message).to.contains('This should pass');
    done(err);
  });
});

此测试用例失败,断言通过,然后再次执行后将引发错误。 请告诉我我要去哪里错了?

2 个答案:

答案 0 :(得分:0)

这可能与您的错误没有任何关系,但实际上看起来并不像异步代码。这样的事情可能更有意义:

const someAsync = (text) => new Promise((resolve, reject)) => {
  try {
    // do something and capture result
    resolve(result);
  } catch (err) {
    reject(new Error(`Failure ${err}`));
  }
})

正如发情期的评论所说,我们可能需要实际的错误和测试框架来进一步诊断。

答案 1 :(得分:0)

done(err)使规范失败。由于这是预期的错误,因此它不应超出规范,而应改为done()

Mocha不需要done来处理承诺,可以从规范中返回承诺。

可能应该是:

it('should throw error when called', () => {
  const mymodule = new MyModule(args);
  return mymodule.someAsync('something that causes failure').catch((err) => {
    expect(err).to.exist;
    expect(err.message).to.contain('This should pass');
  });
});

此外,从列出的代码中不能明显看出expect(err.message).to.contain('This should pass')的断言是正确的。