gpt4 book ai didi

react-native - 中继现代 : how to mock relay for unit testing

转载 作者:行者123 更新时间:2023-12-04 04:08:54 33 4
gpt4 key购买 nike

我正在尝试测试 react 中继现代容器,但遇到了这个问题。

TypeError: Cannot read property 'environment' of undefined

下面是测试代码:
test('render component', () => {
const tree = renderer.create(
<User />,
).toJSON();

expect(tree).toMatchSnapshot();
});

最佳答案

将以下内容添加到 __mocks__文件夹。然后在测试中添加 jest.mock('react-relay');到需要中继的单元测试。这将模拟中继并只留下要测试的组件。

import React from 'react';
import PropTypes from 'prop-types';

const relayMock = jest.genMockFromModule('react-relay');

const relayChildContextTypes = {
relay: PropTypes.object,
};

const relayEnvironment = {
lookup: jest.fn(),
};

const relayContext = {
relay: {
environment: relayEnvironment,
variables: {},
},
};

const relayFragmentProps = {
relay: {
environment: relayEnvironment,
},
};

const relayRefetchProps = {
relay: {
environment: relayEnvironment,
refetch: jest.fn(),
},
};

const relayPaginationProps = {
relay: {
environment: relayEnvironment,
hasMore: jest.fn(),
loadMore: jest.fn(),
isLoading: jest.fn(),
},
};

relayMock.__relayEnvironment = relayEnvironment;
relayMock.__relayFragmentProps = relayFragmentProps;
relayMock.__relayRefetchProps = relayRefetchProps;
relayMock.__relayPaginationProps = relayPaginationProps;

const makeRelayWrapper = (relayProps) => (
(Comp) => {
class HOC extends React.Component {
getChildContext() {
return relayContext;
}

render() {
return <Comp {...this.props} {...relayProps}/>;
}
}

HOC.childContextTypes = relayChildContextTypes;
return HOC;
}
);

relayMock.QueryRenderer = jest.fn(() => React.createElement('div', null, 'Test'));

relayMock.createFragmentContainer = makeRelayWrapper(relayFragmentProps);
relayMock.createRefetchContainer = makeRelayWrapper(relayRefetchProps);
relayMock.createPaginationContainer = makeRelayWrapper(relayPaginationProps);

module.exports = relayMock;

关于react-native - 中继现代 : how to mock relay for unit testing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45897457/

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