Jest.js 了解react应用程序中的历史和窗口

bvn4nwqk  于 2023-02-17  发布在  Jest
关注(0)|答案(1)|浏览(138)

我正在处理一些旧的遗留代码,并试图弄清楚是否可以正确测试或是否可以重构一个助手。我正在使用React 16.13.1,Typescript,Jest和Enzyme 3.11.0。
主应用程序文件和其他帮助程序使用一个公共帮助程序:

import { createBrowserHistory } from 'history'

export const history = createBrowserHistory({
  basename: '/application'
})

我一直在阅读关于createBrowserHistory的文章,除了主应用程序文件中的路由之外,我还没有看到它被使用过,所以我不确定这是否是最佳实践。
我为之添加测试的重定向助手看起来像:

const handleRedirectRoute = (): string => {
  const { pathname } = history.location

  if (pathname === 'some-random-path') {
     return 'random-path'
  } 

  return '/application'
}

问题:
1.更新为使用window.location而不是history.location安全吗?看起来history.locationwindow.location在应用程序运行时包含相同的path, href, etc.。主要区别是相当标准的,历史记录是state的React历史记录,而window.location是窗口的状态。
1.如果升级到使用window.location是不安全的,你如何模拟或测试这里使用的历史记录?我试过模拟browserHistoryuseHistoryuseLocation。在测试中,模拟window.locationuseHistoryuseLocation是不同的,更新一个不会更新另一个。
1.具体来说,在测试中,window.locationuseLocationuseHistory为什么不互相更新呢?在实际应用中似乎是这样的。

gwbalxhn

gwbalxhn1#

我觉得自己没有猜到这一点有点傻,但下面是我如何使用history.location使测试工作的:

import history from 'helpers/history'
import handleRedirectRoute from './handleRedirectRoute'

it('returns /application path when pathname is not random path', () => {
   history.push('/another-path')
   const path = handleRedirectRoute()
   expect(path).toBe('/application')
})

不过,我还是很好奇:
1.历史记录帮助是否是最佳做法,或者什么是最佳做法?
1.将history更新为window是否安全。
1.为什么window.locationhistory(来自createBrowserHistory)、useLocationuseHistory在测试中没有特别地相互更新?

相关问题