首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jest不能使用MenuItem为material-ui的快照测试

Jest不能使用MenuItem为material-ui的快照测试
EN

Stack Overflow用户
提问于 2017-05-27 18:33:31
回答 3查看 815关注 0票数 1

我使用typescript,react和material-ui。我正在尝试用jest做一个快照测试。但是material-ui的MenuItem抛出了Invariant Violation: getNodeFromInstance: Invalid argument.异常。

下面是我要测试的组件:

代码语言:javascript
复制
import * as React from 'react';
import {MuiThemeProvider, Paper, Menu, MenuItem, Divider} from 'material-ui';

class App extends React.Component < any,any > {

  public render() {
    return (
      <MuiThemeProvider>
        <div>
          <Paper >
            <Menu desktop={true}>
              <MenuItem primaryText="Back"/>
              <MenuItem primaryText="Forward" disabled={true}/>
              <Divider/>
              <MenuItem primaryText="Recently closed" disabled={true}/>
              <MenuItem primaryText="Google" disabled={true}/>
              <MenuItem primaryText="YouTube"/>
            </Menu>
          </Paper>
        </div>
      </MuiThemeProvider>
    );
  }
}

export {App};

下面是测试结果

代码语言:javascript
复制
import * as React from 'react';
import {App} from '../menu';
import * as renderer from 'react-test-renderer';

describe('Layout', () => {
  it('renders correctly', () => {

    const layout = renderer.create(<App />).toJSON();

    expect(layout).toMatchSnapshot();
  });
});

和错误消息

代码语言:javascript
复制
Invariant Violation: getNodeFromInstance: Invalid argument.

      at invariant (node_modules/fbjs/lib/invariant.js:44:15)
      at Object.getNodeFromInstance (node_modules/react-dom/lib/ReactDOMComponentTree.js:162:77)
      at Object.findDOMNode (node_modules/react-dom/lib/findDOMNode.js:49:41)
      at ListItem.applyFocusState (node_modules/material-ui/List/ListItem.js:319:43)
      at MenuItem.applyFocusState (node_modules/material-ui/MenuItem/MenuItem.js:206:26)
      at MenuItem.componentDidMount (node_modules/material-ui/MenuItem/MenuItem.js:175:12)
      at node_modules/react-test-renderer/lib/ReactCompositeComponent.js:265:25
      at measureLifeCyclePerf (node_modules/react-test-renderer/lib/ReactCompositeComponent.js:75:12)
      at node_modules/react-test-renderer/lib/ReactCompositeComponent.js:264:11
      at CallbackQueue.notifyAll (node_modules/react-test-renderer/lib/CallbackQueue.js:76:22)
      at ReactTestReconcileTransaction.close (node_modules/react-test-renderer/lib/ReactTestReconcileTransaction.js:36:26)
      at ReactTestReconcileTransaction.closeAll (node_modules/react-test-renderer/lib/Transaction.js:206:25)
      at ReactTestReconcileTransaction.perform (node_modules/react-test-renderer/lib/Transaction.js:153:16)
      at batchedMountComponentIntoNode (node_modules/react-test-renderer/lib/ReactTestMount.js:69:27)
      at ReactDefaultBatchingStrategyTransaction.perform (node_modules/react-test-renderer/lib/Transaction.js:140:20)
      at Object.batchedUpdates (node_modules/react-test-renderer/lib/ReactDefaultBatchingStrategy.js:62:26)
      at Object.batchedUpdates (node_modules/react-test-renderer/lib/ReactUpdates.js:97:27)
      at Object.render (node_modules/react-test-renderer/lib/ReactTestMount.js:125:18)
      at Object.it (src/shell/containers/__tests__/app.test.tsx:8:29)
      at Promise.resolve.then.el (node_modules/p-map/index.js:42:16)
      at process._tickCallback (internal/process/next_tick.js:109:7

如果我从component中删除MenuItem和Menu,则测试通过。

你能帮我处理这个错误吗?

EN

回答 3

Stack Overflow用户

发布于 2017-06-22 21:37:04

这是一个修复,直到我想出一个更好的解决方案,但模拟您的菜单或菜单项将使测试通过。

代码语言:javascript
复制
jest.mock('material-ui/MenuItem');

不幸的是,这将使快照测试变得多余,因为您看不到对菜单项所做的更改。

票数 0
EN

Stack Overflow用户

发布于 2018-09-21 23:14:42

我认为ReactDOM.findDOMNode导致您的测试失败。当我模仿它时,测试用例出现了一些其他错误。我认为你可能想要浅层渲染组件来进行快照测试,否则你将不得不模拟很多依赖项。

这比嘲笑MenuItem要好。MenuItem在内部使用findDOMNode,当它被模拟时会导致其他错误。

您可能想看看这个线程https://github.com/YouCanBookMe/react-datetime/issues/384

票数 0
EN

Stack Overflow用户

发布于 2021-02-03 05:36:46

单独的菜单组件,没有MenuItems,没有道具/有应用程序的道具,在jest测试中渲染时也会失败,甚至没有运行快照:

错误:未捕获根:无法读取未定义的属性‘TypeError’

我放弃了,现在把它解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44215783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档