如果我在测试期间无法重现错误,如何测试catch子句?

时间:2018-04-17 21:39:45

标签: node.js unit-testing mongoose jest supertest

我在服务器端应用程序中使用Jest ans Supertest。我希望通过明显测试每条未覆盖的线来增加测试的覆盖范围,直到我被这个阻塞:

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

如果我在测试中无法重现那种错误(或者至少我不知道怎么做),我如何测试catch子句?

1 个答案:

答案 0 :(得分:0)

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

到目前为止,不存在json似乎是合理的,因为它是一个可以依赖的完全建立的库。但是,只要你想测试抛出异常这样的行为,除了创建存根之外别无他法,将它以某种方式注入到你的代码中,并且在测试设置中使它在调用json时抛出异常。

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