node.js - 如果在测试过程中无法重现错误,如何测试 catch 子句?

标签 node.js unit-testing mongoose jestjs supertest

我在我的服务器端应用程序中使用 Jest 和 Supertest。我希望通过明显测试每条未覆盖的行来增加测试的覆盖范围,直到我被以下内容阻止:

Activity.find()
    .then((data) => {
        res.json(data);
    }).catch(e => res.status(400).send(e));

如果我无法在测试中重现此类错误(或者至少我不知道如何重现),我该如何测试 catch 子句?

最佳答案

在单元测试中,您应该只测试您的代码,而不应该依赖第三方库。当然,这个建议应该合理应用(例如,我们必须依赖于我们正在使用的平台的编译器和开箱即用的库)。

到目前为止,不 stub json 似乎是合理的,因为它是一个值得信赖的成熟库。但是,一旦您想要测试抛出异常之类的行为,除了创建一个 stub ,将其以某种方式注入(inject)到您的代码中,并在测试设置中使其在调用 json 时抛出异常,就没有其他方法了。

作为副作用,这会将您的代码与 json 的特定实现分离,并使您的代码更加灵活。当然,与 JSON 实现解耦似乎有点过头了,但仍然显示了测试驱动设计在这种情况下是如何工作的(即使代码是第一个)。

关于node.js - 如果在测试过程中无法重现错误,如何测试 catch 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49887883/

相关文章:

javascript - Passport JS :redirect to another url with data

javascript - Node.js 和 expressjs 路由到另一个文件夹

c++ - UnitTest++ 多次构建固定装置?

ruby - 如何从 ruby​​ 中的另一个文件调用特定测试

javascript - 带有 Mongoose OOP 的 Node.JS - 如何将 Mongoose 数据访问代码与纯数据对象分开?

mongodb - Mongoose 返回包含属性内任何位置的值的所有文档

javascript - 如何使用mongoose计算mongodb集合文档中的字段总和

node.js - 使用 Nodejs SDK 在 Couchbase 中创建新存储桶

node.js - 如何为 lambda 服务配置 X-Ray

c++ - GoogleMock:如何根据另一个输入参数设置ArgReferee?