Ich habe die folgende Reaktion Komponente, die ich versuche, Einheitstest mit Enzym und Scherz.Enzymtest erreichen Komponente, geben Fehler
import React from 'react';
import { Subject } from 'rxjs/Subject';
import { connect } from 'react-redux';
import styles from './IncrementalSearch.scss';
import { performIncrementalStoreSearch } from './IncrementalSearchActions';
export class IncrementalSearch extends React.Component {
constructor(props) {
console.log('constructor');
super(props);
this.onSearch$ = new Subject();
this.onChange = this.onChange.bind(this);
}
componentDidMount() {
this.subscription = this.onSearch$
.debounceTime(300)
.subscribe(debounced => {
this.props.onPerformIncrementalSearch(debounced);
});
}
componentWillUnmount() {
if (this.subscription) {
this.subscription.unsubscribe();
}
}
onChange(e) {
const newText = e.target.value;
this.onSearch$.next(newText);
}
render() {
return (
<div className={styles.srchBoxContaner}>
<input
className={styles.incSrchTextBox}
type="text" name="search" placeholder="Search.."
onChange={this.onChange}
/>
</div>
);
}
}
const mapDispatchToProps = (dispatch) => ({
onPerformIncrementalSearch: (searchText) => {
dispatch(performIncrementalStoreSearch(searchText));
}
});
const IncrementalSearchComponent = connect(null, mapDispatchToProps)(IncrementalSearch);
export default IncrementalSearchComponent;
My Unit-Test ist wie folgt
import React from 'react';
import { mount } from 'enzyme';
import sinon from 'sinon';
import { IncrementalSearch } from './IncrementalSearch';
describe('<IncrementalSearch />',() => {
it('calls componentDidMount',() => {
sinon.spy(IncrementalSearch.prototype, 'componentDidMount');
const wrapper = mount(<IncrementalSearch />);
expect(IncrementalSearch.prototype.constructor.calledOnce).to.equal(true);
});
});
jedoch, wenn ich das Gerät zu testen ich folgende Fehler
TypeError: Cannot read property 'debounceTime' of undefined
Wenn ich alles in der componentDidMount Kommentar raus laufen dann bekomme ich der folgende Fehler
<IncrementalSearch /> › calls componentDidMount
TypeError: Cannot read property 'equal' of undefined
at Object.<anonymous> (src/components/common/incrementalSearch/IncrementalSearch.test.js:10:89)
at Promise.resolve.then.el (node_modules/p-map/index.js:42:16)
at process._tickCallback (internal/process/next_tick.js:103:7)
<IncrementalSearch />
× calls componentDidMount (29ms)
Gibt es einige zusätzliche Einstellungen, die ich tun muss, um das zu erreichen?
Ich bin ein bisschen verwirrt hier, Jest ist der Testläufer? Enzym ist die Assertion-Bibliothek? Angenommen, das ist wahr, wenn ich Enzyme verwende, dann muss ich die Chai-Syntax richtig benutzen? –
Sie können Enzym mit Mocha und Chai verwenden, müssen Sie nicht Jest verwenden. Jest packt einfach alles zusammen, fügt Istanbul zur Abdeckung hinzu und entfernt alle erforderlichen Konfigurationen. Jest hat standardmäßig eine andere Expect-Bibliothek. Sie können Chai verwenden, wenn Sie wollen (ich denke, es nie versucht ..), aber Jest's Expect sollte genug sein – Patrick
Ich überprüfte die firstIssue auf debounceTime. OnSearch $ existiert tatsächlich, aber debounceTime existiert nicht, wie kann das sein, sollte dies nicht eine Methode des Subjekts sein? –