Тестирование асинхронной функции с использованием Jest / Enzyme - PullRequest
0 голосов
/ 22 мая 2019

Попытка запустить тестовый пример для:

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 Ответ

1 голос
/ 23 мая 2019

вы можете поставить await перед асинхронным методом, например:

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

и сравните, изменилось ли состояние.

Иными словами, если вы можете смоделировать ваш запрос API, потому что это тест, то вам не нужен правильный API, но вы должны знать, правильно ли функция вызывает API, и правильна ли обработка возврата.

И вы, шпионите за функцией вроде:
const spy = jest.spyOn(wrapper.find('AccountForm').instance(), 'getParents');

и campare, если функция была вызвана, если они вызваны каким-либо действием:
expect(spy).toBeCalled()

...