Ich lerne, wie React/Redux-Komponenten mit Enzym zu testen. Die Komponente nimmt den App-Level-Status als Requisiten an. Wenn ich den Test ausführen, bekomme ich die Fehler:React/Redux Testing w/Enzym
Warning: React.createElement: type should not be null, undefined, boolean, or number. It should be a string (for DOM elements) or a ReactClass (for composite components).
TypeError: Cannot read property 'contextTypes' of undefined
mit meinem console.log von wrapper
in der folgenden Testdatei Protokollierung als undefined
.
Ich weiß, dass hier etwas nicht stimmt und habe ein paar Stunden damit verbracht, das herauszufinden. Kann jemand etwas Offensichtliches in der Art sehen, wie ich die Komponente importiere und versuche, sie zu benutzen? Ich kann nicht herausfinden, warum es undefined
ist. Vielen Dank im Voraus für jede Hilfe oder Einsicht!
BackendDisplay.js
import React from 'react';
import { connect } from 'react-redux';
import moment from 'moment';
var BackendDisplay = React.createClass({
render() {
const { username, node_version, app_path, timestamp } = this.props.loginState;
const dateTime = moment(timestamp).format('MMMM Do YYYY, h:mm:ss a');
return (
<div>
<h1>Welcome, {username}!</h1>
<p><span className="bold">Node Version:</span> {node_version}</p>
<p><span className="bold">Application Path:</span> {app_path}</p>
<p><span className="bold">Date/Time:</span> {dateTime}</p>
</div>
);
}
});
const mapStateToProps = function(store) {
return store;
}
module.exports = connect(mapStateToProps)(BackendDisplay);
BackendDisplay.test.js
'use strict';
import React from 'react';
import {shallow} from 'enzyme';
import { connect } from 'react-redux';
import { BackendDisplay } from '../components/BackendDisplay';
describe('<BackendDisplay />',() => {
it('Correctly displays username, node_version, app_path, and timestamp',() => {
const wrapper = shallow(<BackendDisplay />);
console.log(wrapper);
});
});
nach Änderungen Editiert: BackendDisplay.js
BackendDisplay.test.js
'use strict';
import React from 'react';
import {shallow} from 'enzyme';
import { connect } from 'react-redux';
import store from '../store';
import { Provider } from 'react-redux';
import ConnectedBackendDisplay, {BackendDisplay} from '../components/BackendDisplay';
describe('<BackendDisplay />',() => {
it('Correctly displays username, node_version, app_path, and timestamp',() => {
const wrapper = shallow(
<Provider store={store}>
<BackendDisplay />
</Provider>
);
console.log(wrapper.find(BackendDisplay));
expect(wrapper.find(BackendDisplay).length).to.equal(1);
});
});
Fehlermeldung: TypeError: Enzyme::Selector expects a string, object, or Component Constructor
Dank für Ihre schnelle Antwort Dank! Ist dies die Standardmethode zum Testen von Komponenten, die mit dem Geschäft verbunden sind? Würden Sie normalerweise eine separate Datei für die undekorierte Komponente erstellen, und wenn ja, wo würden Sie diese Datei platzieren? Danke, dass du einem Test-Neuling hilfst :) – MizzKFizzle
Ich füge das zu meiner Antwort hinzu. Mit einem Wort nein würden die Tests für diese Komponente alle in der gleichen Testdatei sein. – therewillbecode
Huch. Alle möglichen neuen Fehler. Kämpfe heute Morgen mit dem Bus. – MizzKFizzle