Ich bin kein Experte für Komponententests, und ich versuche 100% Abdeckung auf meinem Dummy Todoapp Projekt zu erreichen, es ist einfach für einfache Komponenten wie eine TodoList Komponente, aber was ist mit der AddTodo Komponente?Wie kann man eine Reaktionskomponente richtig testen?
import React, {PropTypes} from 'react'
import {compose, withState, withProps} from 'recompose'
/**
* Form to create new todos.
*/
const enhance = compose(
withState('value', 'setValue', ''),
withProps(({value, setValue, addTodo}) => ({
handleSubmit: e => (
e.preventDefault(),
addTodo(value),
setValue('')
),
handleChange: e => setValue(e.target.value),
}))
)
const Component = ({value, handleSubmit, handleChange}) =>
<form onSubmit={handleSubmit}>
<input
type="text"
value={value}
onChange={handleChange}
/>
<input type="submit" value="add"/>
</form>
Component.displayName = 'FormNewTodo'
Component.propTypes = {
value: PropTypes.string.isRequired,
handleSubmit: PropTypes.func.isRequired,
handleChange: PropTypes.func.isRequired,
}
export default enhance(Component)
Dies ist mein aktueller AddTodo Test:
import React from 'react'
import {shallow} from 'enzyme'
import FormNewTodo from './index'
test('it should render properly',() => {
const wrapper = shallow(<FormNewTodo value="something"/>)
expect(wrapper).toMatchSnapshot()
})
Diesen Test geben produzieren die folgende Abdeckung: Stmts 62,5, Ast 100, funcs 25, Linien 62.5.
Die ungedeckten Linien sind: 12, 16, 21
Wie soll ich sie richtig testen? Was ich vermisse? Es gibt einige Ressourcen zum Thema?
Ich habe endlich mein Problem gelöst, beachten Sie, dass das Ziel war, 100% Abdeckung und sonst nichts zu erreichen.
Dies ist meine Lösung:
import React from 'react'
import {shallow} from 'enzyme'
import FormNewTodo from './index'
test('<FormNewTodo/>',() => {
const preventDefault = jest.fn()
const addTodo = jest.fn()
const subject = shallow(
<FormNewTodo
addTodo={addTodo}
/>
)
subject.dive()
.find('[type="text"]')
.simulate('change', {target: {value: 'woot'}})
subject.dive()
.simulate('submit', {preventDefault})
expect(preventDefault).toHaveBeenCalled()
expect(addTodo).toHaveBeenCalled()
})
Sie könnten erstellen Benutzerhandbuch des Reagieren App überprüfen möchten aus, hat es einen Abschnitt über das Testen Komponenten Reagieren https://github.com/facebookincubator/create-react-app/blob /master/packages/react-scripts/template/README.md#testing-components – gesuwall