实际上,我正在使用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)”的上下文或道具中找不到“存储”。将根组件包装在中,或者将“存储”作为道具明确传递给“ Connect(SocialServiceProfileImage)”。
我知道我可以使用'react-test-renderer / shallow'进行浅层渲染,但它不允许我像Enzyme一样从DOM中找到任何节点。 谁能帮我这个?。我没有酶,也不想用来反应-redux-mock-store。
答案 0 :(得分:0)
您可以手动定义模拟存储,并将其作为道具传递给组件。不幸的是,它仅适用于指定的组件,如果想更深入,则必须使用redux-mock-store
或编写自己的上下文提供程序。
答案 1 :(得分:0)
您可以为
添加其他默认导出 ProfileImageSelect
(未连接)(类),
并将其默认导入:
import ProfileImageSelect from
'../../../../components/settings/ProfileImageSelect';
以这种方式运行浅层单元测试。 其他解决方案将要求您提供某种类型的存储/模拟存储,因为它们是集成测试。 通常,仅出于测试目的,添加代码或公开对象不是最佳实践。