javascript - 状态更改后测试 react 组件

标签 javascript reactjs meteor mocha.js enzyme

如何测试以下组件?

    import React from "react";

    class ModuleLoader extends React.Component {
            state = {
                    Module: null
            };
            componentDidMount() {
                    this.props
                            .Module()
                            .then(loaded => {
                                    this.setState({ Module: loaded.default });
                            })
            }
            render() {
                    if (this.state.error) {
                            return "error";
                    }
                    if (!this.state.Module) {
                            return "loading";
                    }
                    return <this.state.Module {...this.props} />;
            }
    }

    export default ModuleLoader;

Prop 模块是通过动态导入返回 Promise 的函数。当该导入被解析并加载时,它会返回一个 react 组件,该组件应该存储在状态中并呈现。那么测试应该是什么样子才能让组件解析网络请求加载它、显示它并在渲染后检查断言?

我希望有一些东西可以检查渲染组件的状态是否发生变化。但我无法资助文档中的类似内容。

我正在使用 MeteorMochaEnzyme。 如果无法使用 Enzyme 测试组件,我可以改用替代方案。

谢谢。

最佳答案

解决方案是正确使用 Promise 和 await

it('renders', async () => {
  const props = {
    Module: () =>
      Promise.resolve({
        default: () => <span>Im loaded!</span>,
      }),
  };
  const component = mount(<ModuleLoader {...props} />);
  expect(component).toMatchSnapshot();
  await Promise.resolve(); // tick so promises resolve
  expect(component.update()).toMatchSnapshot();
});

来源:https://gist.github.com/danielhusar/8df72f5677ec69cb9774c1d5c561c56a

关于javascript - 状态更改后测试 react 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52629889/

相关文章:

java - GWT 如何为每个浏览器(例如浏览器)提供正确的 Javascript 代码?进行i18n和浏览器兼容?

javascript - 如何通过spring websocket向特定设备发送消息

javascript - 如何使用jquery向基本 Accordion 添加加减号?

javascript - react Hook : old state value persisting in closure

meteor - 有什么方法可以让 Meteor 中的简单模式验证特定的数组索引吗?

javascript - HTML5 视频暂停时显示海报图像或暂停按钮?

javascript - ReactJS 删除动态元素

javascript - react D3 : How to use react-d3-tooltip and react-d3-zoom in the same chart?

css - Vuetify 包 css 覆盖应用程序的 css

javascript - 通过 ID 在集合中查找用户。允许在 Meteor 中表现非常奇怪