与 this question 相切,我想知道是否有一种方法可以在不通过 HTTP 的情况下触发 Express Router?
最佳答案
路由器有一个 "private" method named handle
接受请求、响应和回调。您可以查看 Express 对其 Router 的测试。 .一个例子是:
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对 Router 执行集成测试.据我了解,SuperTest 仍然使用网络,但它们会为您处理所有这些,因此它的行为就像测试都在内存中一样。 SuperTest 似乎被广泛使用并且是一种可接受的测试路线的方法。
顺便说一句,您没有说明您要测试什么,但如果您的目标是测试某些路由,SuperTest 的替代方法可能是将您的路由中的逻辑提取到一个可以独立测试的单独模块中 express 。
改变:
routes
|
-- index.js
到:
routes
|
-- index.js
|
controllers
|
-- myCustomController.js
然后,测试可以简单地以 myCustomController.js
为目标并注入(inject)任何必要的依赖项。
关于node.js - 是否可以使用 "fake"请求直接从代码调用 Express Router?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33090091/