如何测试Request对象'节点中的属性

时间:2017-01-28 17:44:46

标签: javascript node.js unit-testing http

我有一个返回new Request对象的函数;

import * as _url from 'url';

// pathname starts with '/content/'
const isContentUrl = (path) => /^\/content\//.test(path);

export default function(url) {
    let urlObj = _url.parse(url);

    if (isContentUrl(urlObj.pathname)) {
        urlObj.pathname = `/offline${urlObj.pathname}`;
    }

    return new Request(_url.format(urlObj), {
        credentials: 'same-origin',
        headers: {
            'x-requested-with': 'sw'
        }
    });
}

现在我正在为这个功能编写单元测试,虽然我知道实际上 实际在这里有很多变化,但是比如说标题可能会因为某些原因而改变,如何我可以断言请求对象的一部分,如标题,凭据或URL吗?

有没有一种很好的方法可以解析它进行测试?

理想情况下,我想做一些像

这样的事情
it('should return a Request object with the correct headers', () => {
  const url = '/content/2c509c50-e4ba-11e6-9645-c9357a75844a';
  const request = offlineContent(url);

  const result = request.headers;
  const expected = {'x-requested-with': 'sw'};

  expect(result).to.eql(expected);
});

在我的测试中

2 个答案:

答案 0 :(得分:0)

假设请求request HTTP客户端,返回的对象是定义here的Request构造函数的实例。

如果您按照代码进行操作,则会看到提供的标头只能通过object member提供,因此标题可以通过javascript轻松地自动跟踪self附加的其他成员。

此外,调度请求的http模块可以self.httpModule获得,并且可以通过符合node http module的实现进行模拟,并且可以通过{{{{}}拦截通过库调度的请求。 3}}

答案 1 :(得分:0)

MDN详细介绍了RequestHeaders对象上的方法。不幸的是,我还没有找到一种方法将它转换为一个我可以断言相等的对象。但我可以用这些来断言。

request.url;
request.credentials;
request.headers.get('x-requested-with');

不幸的是,Headers.getAll()方法已被弃用,因此如果有人添加了我声称反对的新标题,则测试失败;

Array.from(request.headers.keys()).length