reactjs - 如何在enzyme中调用多个setProps?

标签 reactjs jestjs enzyme react-props

我有以下测试:

import React from 'react';
import { configure, shallow } from 'enzyme'
import Adapter from 'enzyme-adapter-react-16';

configure({ adapter: new Adapter() });

import ListAdapter from './ListAdapter'
import TweetCard from './TweetCard'


describe('<ListAdapter />', () => {
    let wrapper, props

    beforeEach(() => {
        props = {
            data: [{
                user: { profile_image_url: 'someimage.png', name: 'Some name' },
                created_at: 'Sat Feb 02 19:06:09 +0000 2019',
                text: 'Hello word'
            }],
        };
        wrapper = shallow(<ListAdapter  {...props} />);

    })

    it('renders without crashing', () => {
        expect(wrapper).toBeDefined();
    });

    it('renders one link anchor element', () => {
        expect(wrapper.find('button')).toHaveLength(1);
        expect(wrapper.find(TweetCard)).toHaveLength(0);
    });

    it('check anchor tag text when it gets data and than try to set props', () => {
        expect(wrapper.find('button').at(0).text()).toEqual('You have 1 tweet.');
        var { data } = wrapper.instance().props
        data = [data].concat({
            user: { profile_image_url: 'someimage.png', name: 'Some name' },
            created_at: 'Sat Feb 02 19:06:09 +0000 2019',
            text: 'Hello word'
        })
        wrapper = wrapper.setProps({ data })
        expect(wrapper.find('button').at(0).text()).toEqual('You have 2 tweets.');
        expect(wrapper.instance().props.data).toHaveLength(2)


    // UPDATED TEST TO GET 3 TWEETS
data = wrapper.instance().props
        data = [data].concat({
            user: { profile_image_url: 'someimage.png', name: 'Some name' },
            created_at: 'Sat Feb 02 19:06:09 +0000 2019',
            text: 'Hello word'
        })
        wrapper = wrapper.setProps({ data })
        expect(wrapper.find('button').at(0).text()).toEqual('You have 3 tweets.');
        expect(wrapper.instance().props.data).toHaveLength(3)
    });

    it('check state initialization defaults', () => {
        // we have one props getting passed so it will be 1
        expect(wrapper.state('data_count')).toEqual(1);
    });

    it('test onClick event of button', () => {
        // Try to click and than we should have toggleFlag be true and data_count be 0
        wrapper.find('button').simulate('click')
        expect(wrapper.state('data_count')).toEqual(0);
        expect(wrapper.find(TweetCard)).toHaveLength(1);
        expect(wrapper.find('button')).toHaveLength(0);
    });

})

并且,在测试中显示:在获取数据时检查 anchor 标记文本,然后尝试设置 Prop 我想在添加第二个 Prop 后添加更多 Prop ,但我尝试了同样的方式对于第三个 Prop ,它根本不影响! enzyme 有时真的很棒,有时只是让它变得简单。我知道 setProps 也是一个异步调用。

有什么吗?

谢谢

最佳答案

实际上不需要再次重新评估wrapper

wrapper.setProps({ data }) 而不是 wrapper =wrapper.setProps({ data })

你写得对,但是你的data已经是数组了,然后你做了[data].concat而不是data.concat。但我不确定这就是问题所在。

关于reactjs - 如何在enzyme中调用多个setProps?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54513361/

相关文章:

reactjs - 使用 Enzyme 进行测试时使用 React Hooks 访问功能组件的状态

javascript - 使用 Enzyme 和 Jest 无法通过 'li' 中没有 'ul' 的测试

reactjs - 如何在 Firebase 身份验证电子邮件模板的操作链接 URL 中使用 firebase 的语言代码 (myFirebase.auth().languageCode)?

javascript - 无法使用 React-Router-DOM 路由到所需的 React 组件

node.js - 在没有 postcss 的情况下安装 react-scripts

javascript - Redux-React : How to pass the updated state to function onChange?

reactjs - React Native 如何使用 Jest 测试动画

javascript - onClick 的模拟 SyntheticEvent 处理程序

node.js - Jest/ super 测试错误,类型错误 : app. 地址不是函数

javascript - enzyme 不适用于 karma + webpack