gpt4 book ai didi

reactjs - 通过 CI 测试与本地测试时的 Jest 快照有所不同

转载 作者:行者123 更新时间:2023-12-03 13:26:16 26 4
gpt4 key购买 nike

我已经实现了 Jest 快照测试,效果很好。我唯一无法解决的问题是我的组件在 CI 上渲染了不同的快照。我的测试是:

/* eslint-env jest */
/* eslint import/no-extraneous-dependencies: "off" */

import React from 'react';
import { shallow } from 'enzyme';
import { shallowToJson } from 'enzyme-to-json';
import Combobox from '../Combobox';

describe('<Combobox />', () => {
it('renders correctly', () => {
const wrapper = shallow(
<Combobox
items={[]}
placeholder=""
valueKey=""
labelKey=""
/>
);

expect(shallowToJson(wrapper)).toMatchSnapshot();
});
});

该组件是:

import React, { PropTypes } from 'react';
import Select from 'react-select';

export default class Combobox extends React.Component {
constructor(props) {
super(props);
this.state = {
currentValue: null,
};
this.updateValue = this.updateValue.bind(this);
}

updateValue(newValue) {
this.setState({
currentValue: newValue,
});
}

render() {
return (
<Select
placeholder={this.props.placeholder}
valueKey={this.props.valueKey}
labelKey={this.props.labelKey}
options={this.props.items}
value={this.state.currentValue}
onChange={this.updateValue}
/>
);
}
}

Combobox.propTypes = {
items: PropTypes.array.isRequired,
placeholder: React.PropTypes.string.isRequired,
valueKey: React.PropTypes.string.isRequired,
labelKey: React.PropTypes.string.isRequired,
};

我使用 enzymeenzyme-to-json 生成快照。该组件本身是 react-select 的包装器。在本地测试时一切正常,但在我的 CI 上却出现错误:

FAIL  src/components/__tests__/Combobox.test.jsx
● <Combobox /> › renders correctly

Received value does not match the stored snapshot 1.

- Snapshot
+ Received

<Select
// ...
- optionComponent={[Function anonymous]}
+ optionComponent={[Function Constructor]}
// ...
- valueComponent={[Function anonymous]}
+ valueComponent={[Function Constructor]}
valueKey="" />

at Object.<anonymous> (src/components/__tests__/Combobox.test.jsx:20:82)
at process._tickCallback (internal/process/next_tick.js:103:7)

因此,与我的本地快照相比,optionComponentvalueComponent 具有不同的值。是什么导致我的本地测试和远程测试之间出现这种差异?

最佳答案

更新 (2016 年 10 月 3 日):Jest 16.0 已发布 with the fix !

<小时/>

这是一个known issue并将在 Jest v16 ( source ) 中修复。已修复 PR #1752 .

Node.js 处理函数名称的方式存在问题。如果您在本地计算机和 CI 上使用完全相同版本的 Node.js 应该没问题。

供您引用,JEST 中的解决方案是从快照中删除该名称。它看起来像这样:

optionComponent={[Function]}

一个技巧/黑客pointed问题的关键是将函数包装在匿名函数中:

-      onSelect={onSelectHandler}
+ onSelect={(...args) => onSelectHandler(...args)}

不幸的是,这必须发生在 react-select 库中。

关于reactjs - 通过 CI 测试与本地测试时的 Jest 快照有所不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39786514/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com