node.js - Mocha + Chai - 没有关于错误的详细信息

标签 node.js express testing mocha.js chai

我对 mocha 和 chai 有疑问。我的测试没有显示失败测试的错误(例如,预期“a”为“b”)。 test log

1) Shouldn't publish new post - there is a post with this title
npm ERR! Test failed.  See above for more details.

示例代码:

it('Shouldn\'t publish new post - some required fields are empty', done => {
        request(app)
          .post('/posts')
          .set('Authorization', `Bearer ${token}`)
          .send()
          .end((err, { body }) => {
            if(err) {
              return done(err);
            }

            expect(body).to.have.property('errors');

            return done();
          });
      });

我认为问题并不直接出在 mocha 或 chai 上。我的 repo :github repository .

您需要做的就是克隆存储库、安装依赖项并运行 mongodb。随意创建虚假测试并查看输出。

最好的问候

最佳答案

问题在于,由于嵌套回调,错误处理不一致。如果 expect(body)... 断言失败,这将导致异步错误,该错误永远不会通过 done(error) 报告给当前测试,因此所有异步 Chai 断言都应该是用 try..catch 包裹。

更好的方法是使用 Mocha 原生支持的 promise ,so does Supertest .这允许在没有 done 回调的情况下一致地处理错误:

  it('Shouldn\'t publish new post - outdated/wrong token', async () => {
    const { body } = await request(app)
      .post('/posts')
      .set('Authorization', 'Bearer blah_blah_blah')
      .send();

    expect(body).to.have.property('errors');
  });

关于node.js - Mocha + Chai - 没有关于错误的详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52140351/

相关文章:

javascript - 如何根据每个客户端动态连接mysql数据库?

javascript - 错误 : Evaluation failed: ReferenceError: res is not defined

javascript - 无法访问 req.user 的属性

python - 在 python nose-parameterized 中只跳过参数化列表中的一个参数

java - 单元测试异步代码和没有外部可见效果的代码

node.js - 在 cognito AdminCreateUser 电子邮件中使用动态占位符

mysql - 在 mysql 池中使用回滚

javascript - 如何从方括号内的对象解析字符串

node.js - Passport 不会跨浏览器请求持久存在,可与 Postman 一起使用

python - 使用 Python 和 Selenium 向 Facebook 中的 friend 发送消息