使用 react-spring/react-motion 进行快照测试

Snapshot testing with react-spring/react-motion

我正在尝试使用 Jest 和 Enzyme 对我的 React 组件进行快照测试。一些组件中有动画组件(从 react-spring/react-motion 导入),它渲染一个函数作为它的子组件。这使得测试非常困难。我做了很多研究并提出了 3 个想法:

问题是:我应该使用哪一个?如果 none 这些都足够好,还有哪些替代方案?提前致谢。

(如果您需要代码示例,我很乐意提供)

我通过为 Jest 模拟 react-spring 来解决使用 react-spring 的测试组件的问题。

为此,请将其添加到您的 Jest 配置中:

[...]
"moduleNameMapper": {
    "^react-spring(.*)$": "<rootDir>/jest/react-spring-mock.js"
},

文件 /jest/react-spring-mock.js 可能如下所示:

const React = require('react');

function renderPropsComponent(children) {
    return React.createElement('div', null, children()({}));
}

export function Spring(props) {
    return renderPropsComponent(props.children);
};

export function Trail(props) {
    return renderPropsComponent(props.children);
};

export function Transition(props) {
    return renderPropsComponent(props.children);
};

export function Keyframes(props) {
    return renderPropsComponent(props.children);
};

export function Parallax(props) {
    return renderPropsComponent(props.children);
};

export const animated = {
    div: (props) => {
        return React.createElement('div', null, props.children)
    },
};

注意:这些模拟主要针对 react-spring 的 render-props API。 此外,此技术将导致忽略测试中通常由 react-spring 生成的所有内容。 (它将创建一个容器 <div>。)