【发布时间】:2021-04-18 11:42:59
【问题描述】:
这是我使用 getAllData 方法调用 API 并将数据设置为状态的组件代码:
class MyComponent extends Component {
state = {
allStatus: []
}
componentDidMount() {
this.getAllData();
}
getAllData = async() => {
let res = await apiCalls(`${Config.masterUrl}/ContentState`, 'GET', {}, `/user-data`, false);
if (res) {
this.setState({allStatus: res});
}
}
}
这是测试用例,首先我调用 componentDidMount 并调用 getAllData 方法,然后使用 moxios 模拟 API,但它不会模拟请求。
describe('Render MyComponent Component', () => {
let wrapper;
beforeEach(() => {
wrapper = setup(initialState);
moxios.install();
});
afterEach(() => {
moxios.uninstall();
})
it("should call getAllData API Success", async(done) => {
const responseData = {
status: 200,
error: null,
data: [Array] // for example
}
await wrapper.instance().componentDidMount();
await wrapper.instance().getAllData()
moxios.wait(function() {
const request = moxios.requests.mostRecent();
request.respondWith(responseData)
expect(wrapper.instance().state.allStatus.length).not.toBe(0)
done()
})
})
})
【问题讨论】:
-
如果您还没有配置 moxios 来响应它发出的请求,如何才能完成对
getAllData的调用?此外,您不应该直接调用组件方法,对componentDidMount的调用已经调用了getAllData,并且一旦组件被挂载,React 就会调用componentDidMount。 -
@jonrsharpe 你能添加一个测试吗?
标签: reactjs jestjs mocking enzyme moxios