gpt4 book ai didi

reactjs - 用 Jest 测试中继 [createFragmentContainer]?

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

我正在尝试测试我的组件,但导出 createFragmentContainer 的每个组件都会向我显示此问题:

console.error node_modules\react-native\Libraries\Core\ExceptionsManager.js:73
Warning: Failed context type: Invalid prop/context `relay` supplied to `Relay(Product)`, expected `undefined` to be an object with an `environment` and `variables`.
in Relay(Product)
console.error node_modules\react-native\Libraries\Core\ExceptionsManager.js:73
React caught an error thrown by Relay(Product). You should fix this error in your code. Consider adding an error boundary to your tree to customize error handling behavior.

TypeError: Cannot read property 'environment' of undefined

The error is located at:
in Relay(Product)

jest 支持片段容器还是问题出在我的项目中?

最佳答案

将以下内容添加到 __mocks__ 文件夹中。然后在测试中添加jest.mock('react-relay');到需要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;

关于reactjs - 用 Jest 测试中继 [createFragmentContainer]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45802834/

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