Я только что закончил писать свой первый Reactjs
компонент, и я готов написать несколько тестов (я использовал material-ui
Table
и Toggle
).Я читал о jest
и enzyme
, но чувствую, что мне все еще что-то не хватает.
Мой компонент выглядит следующим образом (упрощенно):
export default class MyComponent extends Component {
constructor() {
super()
this.state = {
data: []
}
// bind methods to this
}
componentDidMount() {
this.initializeData()
}
initializeData() {
// fetch data from server and setStates
}
foo() {
// manuipulatig data
}
render() {
reutrn (
<Toggle
id="my-toggle"
...
onToggle={this.foo}
>
</Toggle>
<MyTable
id="my-table"
data={this.state.data}
...
>
</MyTable>
)
}
}
Теперь для теста.Я хочу написать тест для следующего сценария:
- Подарить initializeData с проверенными данными.
- Переключить my-toggle
- Утверждение данных изменилось (Должен ли я утверждатьсами данные или лучше вместо этого утверждать мою таблицу?)
Итак, я начал в самом начале с:
describe('myTestCase', () => {
it('myFirstTest', () => {
const wrapper = shallow(<MyComponent/>);
}
})
Я запустил его, но он не удался:ReferenceError: fetch is not defined
Тогда мой первый вопрос: как мне посмеяться над initializeData
, чтобы преодолеть необходимость вызова реального кода, использующего fetch?
Я последовал этому ответу: https://stackoverflow.com/a/48082419/2022010 и придумал следующее:
describe('myTestCase', () => {
it('myFirstTest', () => {
const spy = jest.spyOn(MyComponent.prototype, 'initializeData'
const wrapper = mount(<MyComponent/>);
}
})
Но я все еще получаю ту же ошибку (я также попробовал ее с componentDidMount
вместо initializeData
, новсе закончилось так же).
Обновление: Я был не прав.Я получаю ошибку извлечения не определено, но на этот раз она исходит из компонента Table (который является переносом для Table-UI).Теперь, когда я подумаю об этом, у меня есть много «уловок» на этом пути ... Интересно, как тогда позаботиться о них.