Node.js 如果可以,如何测试catch子句';在测试过程中是否再现错误?

Node.js 如果可以,如何测试catch子句';在测试过程中是否再现错误?,node.js,unit-testing,mongoose,jestjs,supertest,Node.js,Unit Testing,Mongoose,Jestjs,Supertest,我在服务器端应用程序中使用Jest ans Supertest。我希望通过测试每一条未覆盖的线路来增加我的测试覆盖率,直到我被以下问题所阻碍: Activity.find() .then((data) => { res.json(data); }).catch(e => res.status(400).send(e)); 如果我不能在测试中重现这种错误(或者至少我不知道如何重现),我如何测试catch子句呢?在单元测试中,您应该只测试代码,而不应该依

我在服务器端应用程序中使用Jest ans Supertest。我希望通过测试每一条未覆盖的线路来增加我的测试覆盖率,直到我被以下问题所阻碍:

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

如果我不能在测试中重现这种错误(或者至少我不知道如何重现),我如何测试catch子句呢?

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

到目前为止,不使用stub
json
似乎是合理的,因为它是一个相当成熟的库,您可以依赖它。但是,只要您想要测试抛出的异常等行为,就没有其他方法了,只能创建一个存根,以某种方式将其注入到代码中,并在测试设置中使其在调用
json
时抛出异常

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