如何使用react-test-renderer和jest测试包含嵌套组件的反应组件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用react-test-renderer和jest测试包含嵌套组件的反应组件?相关的知识,希望对你有一定的参考价值。
实际上,我正在使用react-test-render和jest在react-native中编写测试用例?我有一个我需要测试的组件,该组件包含连接组件的嵌套组件。下面是我为测试组件而编写的代码:
import React from 'react';
import renderer from 'react-test-renderer';
import sinon from 'sinon';
import { clone } from 'lodash';
import { ProfileImageSelect } from
'../../../../components/settings/ProfileImageSelect';
const userInfo = {
first_name: 'test_first_name',
last_name: 'test_last_name'
};
describe('<ProfileImageSelect />', () => {
let onClose;
let onSelect;
let socialLogins;
beforeEach(() => {
socialLogins = {
facebook: {
id: '187416164',
identifier: 'adams_facebook',
full_name: 'Eric Adams',
profile_pic: 'profile_pic_facebook.jpeg',
expired: false
},
twitter: {
full_name: 'Eric Adams',
id: '187416164',
identifier: 'adams_ea',
profile_pic: 'https://pbs.twimg.com/profile_images/707586445427380226/5uETA8fs.jpg',
expired: false
},
linkedin: {
full_name: 'Eric Adams',
id: '8vN6Da_RJJ',
identifier: 'adams.ea@gmail.com',
profile_pic:
'https://media.licdn.com/dms/image/C5603AQFfn5Ko5IS1NQ/profile-displayphoto-shrink_100_100/0?e=1549497600&v=beta&t=11m5mirEr_R2gf3OOfh3zHTL3Xe2ImrxcZ7l7ebLDa0',
expired: false
}
};
onClose = sinon.stub();
onSelect = sinon.stub();
});
it('calls onClose on the props on click of cancel link ', () => {
const connected = clone(socialLogins, true);
const testRenderer = renderer.create(
<ProfileImageSelect
onSelect={onSelect}
onClose={onClose}
socialLogins={connected}
userInfo={userInfo}
/>
);
const root = testRenderer.root;
root.findByProps({ className: 'cancel' }).props.onPress();
expect(onClose.called).toEqual(true);
});
});
但它告诉我一个错误说:
不变违规:无法在“Connect(SocialServiceProfileImage)”的上下文或道具中找到“store”。将根组件包装在a中,或者将“store”显式传递为“Connect(SocialServiceProfileImage)”的prop。
我知道我可以使用'react-test-renderer / shallow'进行浅层渲染,但它不允许我像DOM那样从DOM中找到任何节点。谁能帮我这个?。我没有酶,也不想用反应 - redux-mock-store。
您可以手动定义模拟存储并将其作为prop传递给组件。不幸的是,它只适用于指定的组件,如果你想深入,你必须使用redux-mock-store
或编写自己的上下文提供程序。
您可以为其添加其他默认导出
ProfileImageSelect
(该类)未连接,并将其作为默认值导入:
import ProfileImageSelect from
'../../../../components/settings/ProfileImageSelect';
这样你就可以进行浅单元测试了。其他解决方案将要求您提供某种存储/模拟存储,因为它们是集成测试。通常,为了测试而添加代码或公开对象通常不是最佳做法。
以上是关于如何使用react-test-renderer和jest测试包含嵌套组件的反应组件?的主要内容,如果未能解决你的问题,请参考以下文章
travis 无法构建,因为错误:找不到模块“react-test-renderer/shallow”
为啥 react-test-renderer 在 React 中只能在同一个文件中 findByType 功能组件?