首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用jest +酶+ react-redux测试propTypes的最佳实践?

用jest +酶+ react-redux测试propTypes的最佳实践?
EN

Stack Overflow用户
提问于 2018-07-31 21:37:02
回答 1查看 1.9K关注 0票数 0

我尝试了许多在谷歌上找到的解决方案,以测试在react组件中是否正确设置了Component.propTypes,但它们都不适用于我。即使在浏览器上运行React应用程序时,如果属性传递不正确,我会收到控制台警告,但当我运行jest时,我无法以任何尝试的方式捕获该警告。这是我最好的尝试:

App.js:

代码语言:javascript
复制
export class App extends Component {
    constructor(props) {
        super(props);
    }

    render() {
        return <div/>;
    }
}


App.propTypes = {
    images: PropTypes.array.isRequired
};

function mapStateToProps(state) {
    const {images} = state;
    return {images: images};
}

export default connect(mapStateToProps)(App);

App.test.js:

代码语言:javascript
复制
import React from 'react';
import chai from 'chai';
import chaiEnzyme from 'chai-enzyme';
import {shallow} from 'enzyme';
import configureStore from 'redux-mock-store';
import thunk from 'redux-thunk';
import sinon from 'sinon'

import {Provider} from 'react-redux';
import App from './App';

const expect = chai.use(chaiEnzyme()).expect
const mockStore = configureStore([thunk]);

const wrap = (initialState, props) => {
    return shallow(<Provider store={mockStore(initialState)}><App {...props} /></Provider>)
};

describe('App container', () => {
    it('validates properties', () => {
        const stub = sinon.stub(console, 'warn');

        console.warn.reset();
        React.createElement(App, {});
        expect(stub.calledOnce).to.equal(true);
        expect(stub.calledWithMatch(/Failed prop type/)).to.equal(true);

        console.warn.restore();
    });

    it('renders without crashing', () => {
        wrap();
    });

    it('is react-redux connected', () => {
        const wrapper = wrap();
        expect(wrapper.find('Connect(App)')).to.have.length(1);
    });

    it('correctly maps properties', () => {
        const wrapper = wrap({images: []});
        expect(wrapper.props().images).to.equal([]);
    });
});
EN

回答 1

Stack Overflow用户

发布于 2018-11-10 05:15:02

根据我在网上读到的各种GitHub问题主题,似乎一种常见的方法是让console.warn/console.error抛出。

因此,当您编写测试时,您可以这样做

代码语言:javascript
复制
expect(// Render Component //).to.throw();

希望这能有所帮助。

更多信息:https://github.com/airbnb/enzyme/issues/588

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51614745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档