酶和反应路由器:如何使用useHistory浅化呈现组件

弘树

我一直在尝试使用渲染组件shallow,该组件由提供enzyme

该组件正在使用useHistoryfrom react-router-dom

const baseMatch: match<{ id: string }> = { /* path, url, params */};
const location = createLocation(baseMatch.url);

describe('MyComponent', () => {
  const baseProps = {
    history: createMemoryHistory(),
    location: createLocation(baseMatch.url),
    match: baseMatch
  };

  beforeEach(() => {
    jest.mock('react-router-dom', () => ({
      useHistory: jest.fn()
    }));
  });

  afterEach(() => { jest.clearAllMocks() });

  it('renders blah blah', () => {
    const wrapper = shallow(<MyComponent {...baseProps} />);
    // testing MyComponent here...
  });

我提到了这篇文章,并jest.mock以同样的方式提出。

但是,这导致TypeError: Cannot read property 'history' of undefined

控制台说:

MyComponent › renders blah blah

    TypeError: Cannot read property 'history' of undefined

      24 | const MyComponent = (props: IProps) => {
      25 |   console.log('useHistory', useHistory);
    > 26 |   let history = useHistory();

奇怪的是,console.log上面第25行中显示的实现useHistory(换句话说,它不是未定义的)。

显然,useHistory没有嘲笑。我怀疑这useHistory不能被嘲笑shallow(在上面的帖子中,海报使用mount())。

不过,我不是100%肯定,因为我无法找到,如果shallow是兼容useHistory的的文档或不enzymereact-router

是否有可能使用shallowuseHistory任何建议将被认真考虑。

丹尼尔

文档

注意:为了正确模拟,Jest需要jest.mock('moduleName')与require / import语句在同一范围内。

因此,不要嘲笑react-router-dom-beforeEach尝试将其放在顶级范围内:

jest.mock('react-router-dom', () => ({
  useHistory: jest.fn()
}));

const baseMatch: match<{ id: string }> = { /* path, url, params */};
const location = createLocation(baseMatch.url);


describe('MyComponent', () => {
  const baseProps = {
    history: createMemoryHistory(),
    location: createLocation(baseMatch.url),
    match: baseMatch
  };

...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用“反应路由器”创建NotFoundRoute组件

来自分类Dev

反应路由器更改URL,但未呈现组件

来自分类Dev

反应路由器未呈现正确的组件

来自分类Dev

使用反应路由器 4 和 redux 时,反应视图未呈现

来自分类Dev

反应路由器 - 如何从内容呈现链接

来自分类Dev

路由器视图不呈现路线和组件

来自分类Dev

如何使用反应路由器

来自分类Dev

反应路由器 v4 路由已更改但未呈现正确的组件

来自分类Dev

反应路由器getIndexRoute不呈现

来自分类Dev

反应路由器更改链接但不呈现正确的组件

来自分类Dev

反应路由器不渲染组件

来自分类Dev

反应路由器不显示组件

来自分类Dev

复制组件在“反应路由器”中?

来自分类Dev

反应路由器不渲染组件

来自分类Dev

使用反应路由器将对象传递给反应组件

来自分类Dev

测试反应路由器中的反应组件

来自分类Dev

使用参数将路由器路由反应到错误的组件

来自分类Dev

反应,电子和路由器

来自分类Dev

反应路由器和useCallback

来自分类Dev

反应,电子和路由器

来自分类Dev

打字稿和反应路由器

来自分类Dev

反应路由器dom和布局

来自分类Dev

反应路由器动态路由不渲染组件

来自分类Dev

组件未刷新的反应路由器路由问题

来自分类Dev

如何使用路由器出口加载Angular组件

来自分类Dev

获取异步组件时反应路由器抛出和错误

来自分类Dev

路由器更改网址,但不更改呈现的组件

来自分类Dev

React 路由器的 switch 语句不呈现组件

来自分类Dev

反应路由器| 如何从子组件获取父参数值?版本:1.0.0-rc1