我想找出是否有一种无需实际通过HTTP即可触发Express Router的方法?
路由器具有名为“私有”方法的名称handle,该方法接受请求,响应和回调。您可以看一下Express对其Router进行的测试。一个例子是:
handle
it('should support .use of other routers', function(done){ var router = new Router(); var another = new Router(); another.get('/bar', function(req, res){ res.end(); }); router.use('/foo', another); router.handle({ url: '/foo/bar', method: 'GET' }, { end: done }); });
Express团队使用SuperTest在路由器上执行集成测试。据我了解,SuperTest仍在使用网络,但它们会为您处理所有这些,因此其行为就像测试全部在内存中一样。SuperTest似乎确实被广泛使用,并且是一种可接受的测试路线的方法。
顺便说一句,您没有说您要测试的内容,但是如果您的目标是测试某些路由,那么SuperTest的替代方法可能是将路由中的逻辑提取到一个单独的模块中,该模块可以独立于Express进行测试。
更改:
routes | -- index.js
至:
routes | -- index.js | controllers | -- myCustomController.js
然后,测试可以简单地针对myCustomController.js并注入任何必要的依赖项。
myCustomController.js