使用Jest / Enzyme测试异步功能

时间:2019-05-22 18:57:07

标签: async-await jestjs enzyme

尝试为以下项目运行测试用例:

async getParents() {
 const { user, services, FirmId } = this.props;
 let types = await Models.getAccounts({ user, services, firmId: FirmId });
 let temp = types.map((type) => {   
     if(this.state.Parent_UID && this.state.Parent_UID.value === type.Account_UID) {
       this.setState({Parent_UID: {label: type.AccountName, value: type.Account_UID}})
    }           
     return {
       label: type.AccountName,
       value: type.Account_UID,
     }
   })
 this.setState({ParentOptions: temp});
}    

这是我到目前为止要进行的测试:

beforeEach(() => wrapper = mount(<MemoryRouter keyLength={0}><AccountForm {...baseProps} /></MemoryRouter>));

it('Test getParents function ',async() => {
 wrapper.setProps({
   user:{},
   services:[],
   FirmId:{},
 })
 wrapper.find('AccountForm').setState({
  SourceOptions:[[]],
  Parent_UID: [{
  label:[],
  value:[],
 }],
    });
wrapper.update();
  await 
expect(wrapper.find('AccountForm').instance().getParents()).toBeDefined()
});

如果我尝试使这个ToEqual()期望一个承诺而不是一个对象,那么我还可以在此测试中添加什么才能使其正常工作。

目标:确保正确调用了函数。目前该测试已通过,测试覆盖率略有增加。 将Jest和Enzyme用于React Js

1 个答案:

答案 0 :(得分:1)

您可以将await放在async方法之前,例如:

await wrapper.find('AccountForm').instance().getParents()

比较状态是否更改。

以另一种方式,如果可以模拟您的API请求,因为这是一个测试,则您不需要正确的API,但是知道该函数是否正确调用了API,以及返回处理是否正确。

而且,您可以监视以下功能:
const spy = jest.spyOn(wrapper.find('AccountForm').instance(), 'getParents');

和Campare(如果通过某些操作触发了该函数):
expect(spy).toBeCalled()