使用Express中的笑话测试重定向

时间:2019-06-21 15:01:49

标签: node.js unit-testing express jestjs

我正在使用Jest测试我的代码。 我想要实现的是测试从http到https的重定向。 (如果存在,则为process.env.IS_PRODUCTION)。

我不知道如何测试它,如何模拟它等等……

我尝试过标准获取要求,但是不知道如何模拟环境变量或以不同方式对其进行测试

it('should redirect from http to https, (done) => {
  request(server)
    .get('/')
    .expect(301)
    .end((err, res) => {
      if (err) return done(err);
      expect(res.text).toBe('...')
      return done();
    });
}, 5000); 

我希望能够测试此重定向:)

2 个答案:

答案 0 :(得分:0)

前言:我对笑话,表达或结点不熟悉。但是我发现测试显式配置(使用显式值实例化对象)比隐式配置(环境变量和它们上的实现开关)要容易得多:

我不确定requestserver是什么,但显式方法可能类似于:

it('should redirect from http to https, (done) => {
  const server = new Server({
    redirect_http_to_https: true,
  });
  request(server)
    .get('/')
    .expect(301)
    .end((err, res) => {
      if (err) return done(err);
      expect(res.text).toBe('...')
      return done();
    });
}, 5000); 

这允许测试将服务器显式配置为所需的状态,而不是破坏环境。


此方法还有助于保持process configuration at the top level of your application

  const server = new Server({
    redirect_http_to_https: process.env.IS_PRODUCTION,
  });

答案 1 :(得分:0)

您可以使用node-mocks-http库,该库允许您模拟请求和响应对象。

示例:

const request = httpMocks.createRequest({
    method: 'POST',
    url: '/',
});
const response = httpMocks.createResponse();

middlewareThatHandlesRedirect(request, response);

我从不开玩笑,但我相信一旦调用了中间件,您就可以检查response.location参数