可以直接从具有“假”的代码呼叫Express Router。请求? [英] Is it possible to call Express Router directly from code with a "fake" request?

查看:187
本文介绍了可以直接从具有“假”的代码呼叫Express Router。请求?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有关这个问题的切入点,我想知道是否有是一种触发快速路由器而不实际通过HTTP的方法?

Tangential to this question, I would like to find out if there is a way of triggering the Express Router without actually going through HTTP?

推荐答案

路由器有一个private方法命名为 handle 接受请求,响应和回调。您可以查看Express对其路由器。一个例子是:

The Router has a "private" method named handle that accepts a request, a response, and a callback. You can take a look at the tests that Express has for its Router. One example is:

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似乎被广泛使用,并且是可以接受的测试路线的方法。

The Express team uses SuperTest to perform integration tests on the Router. It is my understanding that SuperTest still uses the network but they handle all of this for you so it behaves as if the tests were all in memory. SuperTest does seem to be widely used and an acceptable way to test your routes.

除此之外,您没有说出尝试测试的内容,但如果您的目标是测试一些路线,替代SuperTest可以将路由中的逻辑提取到一个单独的模块,可以独立于Express进行测试。

As an aside, you didn't say what you were attempting to test but if your goal is to test some routes, an alternative to SuperTest could be to extract the logic in your routes into a separate module that can be tested independent of Express.

change: p>

change:

routes
|
-- index.js

to:

routes
|
-- index.js
|
controllers
|
-- myCustomController.js

测试可以简单地定位 myCustomController.js 并注入任何必需的依赖项。

The tests could then simply target myCustomController.js and inject any necessary dependencies.

这篇关于可以直接从具有“假”的代码呼叫Express Router。请求?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆