我有一个有两条路线的文件。
routes/index.js
const express = require('express')
const router = express.Router()
router.get('', (req, res, next) => {
try {
res.status(200).render('../views/')
} catch (error) {
next(error)
}
})
router.get('*', (req, res, next) => {
try {
res.status(404).render('../views/not-found')
} catch (error) {
next(error)
}
})
module.exports = router
字符串
我想测试一下捕捉树枝。一个明显的问题是我不能伪造router.get的回调函数,因为那样的话我的测试就没有意义了,我会修改我想要测试的东西。
我可以向这些特定的路由发送一个Supertest请求,但我无法控制发生了什么。我想避免创建硬编码的路由,这样我就可以检查中间件是否被下一个函数调用。如果我理解正确的话,如果我在try块中发生了额外的事情(比如数据库查询),那么我可以模拟 that 来抛出错误。
但我没有任何额外的事情发生在那里。以下是我无法理解的:如果我模拟服务器所做的事情,那么我就不会测试我已经拥有的东西,而是测试其他东西,所以这样做没有意义。也许我误解了事情是如何工作的,但就我所知,唯一的选择是以某种方式模拟res.status或res.render所做的事情(存根他们,所以他们抛出错误),所以以某种方式模拟Supertest所做的事情,但我不知道如何做到这一点。
任何帮助将不胜感激!
1条答案
按热度按时间q8l4jmvw1#
单元测试溶液:
route.js
:字符串
route.test.js
:型
单元测试结果和覆盖率报告:
型