如何使用Jest测试网址更改

时间:2018-06-21 21:48:20

标签: javascript unit-testing jestjs

我要测试以下功能

function tradePage() {
  setTimeout(function() {
    window.location.pathname = document
      .getElementById('button')
      .getAttribute('new-page');
  }, 100);
}

我编写了以下测试:

test('should change page when button is clicked', () => {
  var button = document.querySelector('#button');

  jest.useFakeTimers();
  button.dispatchEvent(createEvent('click'));
  jest.runAllTimers();

  expect(window.location.pathname).toEqual('/new-url');
});

但是当我运行测试时,出现此错误:

    expect(received).toEqual
    Expected value to equal:
    "/new-url"
    Received:
    "blank"

我已经完成/尝试过的事情

  • 我的packages.json已经设置了"testURL"
  • 我发现了这个可能的解决方案(不起作用):

    Object.defineProperty(window.location, 'pathname', {
      writable: true,
      value: '/page/myExample/test',
    });
    

有什么想法我还能尝试吗?

2 个答案:

答案 0 :(得分:1)

通过在测试开始时声明一个全局变量,我找到了一种可行的方法:

global.window = { location: { pathname: null } };

并按如下所示检查此变量:

expect(global.window.location.pathname).toEqual('/new-url');

那很好。

答案 1 :(得分:0)

Object.assign(location, { host: "www.newhost.com", pathname: 'file.txt' });

它将更新所有location URL对象属性(origin, href, hostname, host)。

因此最终的href属性将是https://www.newhost.com/file.txt

beforeEach块中执行此操作。

只需致电console.log(location)来验证结果。编码愉快!