我刚刚完成了我的第一个Reactjs
组件的编写,我准备编写一些测试(我使用了material-ui
'sTable
和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-table 更好?)
所以我从一开始就开始:
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
但结果相同)。
更新:我错了。我确实得到了一个 fetch is not defined 错误,但这次它来自 Table 组件(它是 material-ui 表的包装)。现在回想起来,一路上确实有很多“取物”……我想知道如何照顾它们。