带有URL对象的开玩笑的测试

问题描述 投票:0回答:1

我有一种情况,我的代码使用的是这样创建的URL api:

const _url = new URL(window.location.href);

并且像这样使用:

if (_url.searchParams.get('locale')) {
    do something
}

但是在我的笑话测试中,我得到一个错误:

TypeError: Cannot read property 'get' of undefined

我通过在安装文件中执行此操作来尝试进行全局模拟:

global.URL = jest.fn(() => {
  return {
    searchParams: jest.fn(() => {
      return {
        get: jest.fn(() => {
          return '';
        }),
      };
    }),
  };
});

但是它似乎不起作用。查看我的_url对象的控制台记录输出,看起来好像一起都缺少searchParam属性:

URL {
  [Symbol(impl)]: URLImpl {
    _url: {
      scheme: 'http',
      username: '',
      password: '',
      host: 'localhost',
      port: null,
      path: [Array],
      query: null,
      fragment: null,
      cannotBeABaseURL: false
    },
    [Symbol(wrapper)]: [Circular]
  }
}

我在这里做错了什么?

reactjs testing url mocking jestjs
1个回答
0
投票

我能够通过这样在设置文件中进行全局模拟来解决它:

global.URL = (() => {
  return {
    searchParams: {
      get: jest.fn((param) => {
        const reg = `[?&]${param}=([^&]*)`;
        return (window.location.search.match(reg) && window.location.search.match(reg)[1]) ? window.location.search.match(reg)[1] : '';
      }),
    },
  };
});
© www.soinside.com 2019 - 2024. All rights reserved.