ich einfach haben reagieren Komponente, dass die Verwendung Karte von antd:Enzym: flach machen innere reagieren-redux Komponenten
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { Card } from 'antd';
export class TBD extends Component {
constructor() {
super();
}
render() {
return (
<Card title={this.props.pathname}>
TODO
</Card>
);
}
}
export let select = (state) => {
return state.route;
};
export default connect(select)(TBD);
Jetzt schreibe ich ein paar einfache Tests und überprüfen möchten, dass meine TBD Komponente Verwendung Karte
import React from 'react';
import {mount, shallow} from 'enzyme';
import {Provider, connect} from 'react-redux';
import {createMockStore} from 'redux-test-utils';
import {expect} from 'chai';
import chai from 'chai';
import chaiEnzyme from 'chai-enzyme';
chai.use(chaiEnzyme());
import { Card } from 'antd';
import TBDConnected, {TBD, select} from '../src/js/components/TBD';
describe('Fully Connected:', function() {
it('show selected item text', function() {
const expectedState = {route: {pathname: 'Menu1'}};
const store = createMockStore(expectedState);
const ConnectedComponent = connect(select)(TBDConnected);
const component = shallow(<ConnectedComponent store={store} />).shallow().shallow();
console.log(component.debug());
expect(component.equals(<Card/>)).is.equal(true);
});
});
Und es scheitern, weil drei flache mir zurück
<Component title="Menu1">
TODO
</Component>
Aber ich bin erwarten
<Card title="Menu1">
TODO
</Card>
Nach einer weiteren render bekomme ich pure html von der rendering karte Ich verstehe nicht warum es es zur Component statt Karte rendert und wie ich das Ergebnis bekommen kann was ich will.
Aktualisieren
Beispiel, dass meine Frage zu vereinfachen. Nächster Test fehlschlagen:
describe('TBD', function() {
it('Renders a Card', function() {
const component = shallow(<TBD />);
console.log(component.debug());
expect(component.equals(<Card/>)).is.equal(true);
});
});
Debug-Ausgabe in der Konsole:
<Component title={[undefined]}>
TODO
</Component>
Aber ich erwarte:
<Card title={[undefined]}>
TODO
</Card>
'connect' ist eine Komponente höherer Ordnung und enthält daher' Card' in einer generischen Komponente. Ich würde denken, dass "seicht" nur die erste Ebene wiedergeben würde (was die generische Komponente wäre). Diese Diskussion könnte nützlich sein: https://github.com/reactjs/redux/issues/1534 –
@DavinTryon, Wenn ich alle redux Teil (connect, store, etc.) wegwerfen, und nur react-Komponente (es importiert separat): 'shallow ( )', dann bekomme ich wieder das ergebnis ' TODO '. –
sepulka