node.js - 是否可以使用 "fake"请求直接从代码调用 Express Router?

标签 node.js express routing run-middleware

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 团队使用 SuperTestRouter 执行集成测试.据我了解,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/

相关文章:

ruby-on-rails - Rails:使用参数重定向

node.js - 多个路径同时匹配-奇怪的快速行为

javascript - Node.js - response.write(...) 不起作用

javascript - 尽管使用了 db.insert 函数,数据库并未更新

routing - 如何在 Polymer Starter Kit 中设置 baseUrl?

node.js - 如何在Azure上运行nodejs、express js项目的启动命令?

node.js - 过期的 Node session cookie

javascript - node.js ejs - 如果文件不存在,则不渲染文件

javascript - 内联嵌入字段不起作用

CoffeeScript 中的 Node.js module.exports