jest快照测试:如何在jest测试结果中忽略部分快照文件

时间:2017-03-21 18:56:04

标签: react-native jestjs snapshot

问题:忽略.snap文件测试结果的某些部分

这里的问题:我的测试中有一些组件具有随机值,我并不真正关心测试它们。有没有办法忽略我的X.snap文件的一部分?因此,当我将来进行测试时,它不会给我测试失败的结果。

3 个答案:

答案 0 :(得分:11)

实际上,你需要模拟移动部件。

jest docs中所述:

  

您的测试应该是确定性的。也就是说,在未更改的组件上多次运行相同的测试应该每次都产生相同的结果。您负责确保生成的快照不包含特定于平台的数据或其他非确定性数据。

如果它与时间有关,可以使用

IllegalArgumentException

答案 1 :(得分:7)

现在您还可以在这些情况下使用property matcher

通过示例可以对这些对象使用快照:

const obj = {
  id: dynamic(),
  foo: 'bar',
  other: 'value',
  val: 1,
};

您可以使用:

expect(obj).toMatchSnapshot({
  id: expect.any(String),
});

Jest只会检查id是一个字符串,并将照常处理快照中的其他字段。

答案 2 :(得分:2)

我知道这是一个很老的问题,但我知道另外一个解决方案。您可以修改要忽略的属性,因此它将始终是常量,而不是随机/动态。这是最适合使用第三方代码,从而可能无法控制不确定性属性生成的情况
示例:

import React from 'react';
import Enzyme, { shallow } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
import Card from './Card';
import toJSON from 'enzyme-to-json';

Enzyme.configure({ adapter: new Adapter() });

describe('<Card />', () => {
    it('renders <Card /> component', () => {
        const card = shallow(
            <Card
                baseChance={1}
                name={`test name`}
                description={`long description`}
                imageURL={'https://d2ph5fj80uercy.cloudfront.net/03/cat1425.jpg'}
                id={0}
                canBeIgnored={false}
                isPassive={false}
            />
        );
        const snapshot = toJSON(card);

        // for some reason snapshot.node.props.style.backgroundColor = "#cfc5f6" 
        // does not work, seems the prop is being set later
        Object.defineProperty(snapshot.node.props.style, 'backgroundColor', { value: "#cfc5f6", writable: false });

        // second expect statement is enaugh but this is the prop we care about:
        expect(snapshot.node.props.style.backgroundColor).toBe("#cfc5f6");
        expect(snapshot).toMatchSnapshot();
    });
});