Jest simulado assíncrono chama dentro reagir componente
Eu sou novo no gracejo / enzima e estou tentando zombar de uma chamada para uma função aync que retorna uma promessa, a chamada é feita dentro de um componente de reação no método componentDidMount.
O teste está tentando testar se componentDidMount define a matriz retornada pela promessa no estado.
O problema que estou tendo é que o teste termina e passa antes que a matriz seja adicionada ao estado. Estou tentando usar o retorno de chamada 'concluído' para que o teste aguarde até que a promessa seja resolvida, mas isso não parece funcionar.
Eu tentei mover as chamadas esperadas para a linha antes da chamada done (), mas isso também não parece funcionar.
Alguém pode me dizer o que estou fazendo de errado aqui?
Componente sendo testado:
componentDidMount() {
this.props.adminApi.getItems().then((items) => {
this.setState({ items});
}).catch((error) => {
this.handleError(error);
});
}
Meu teste:
import React from 'react';
import { mount } from 'enzyme';
import Create from '../../../src/views/Promotion/Create';
import AdminApiClient from '../../../src/api/';
jest.mock('../../../src/api/AdminApiClient');
describe('view', () => {
describe('componentDidMount', () => {
test('should load items into state', (done) => {
const expectedItems = [{ id: 1 }, { id: 2 }];
AdminApiClient.getItems.mockImplementation(() => {
return new Promise((resolve) => {
resolve(expectedItems);
done();
});
});
const wrapper = mount(
<Create adminApi={AdminApiClient} />
);
expect(wrapper.state().items).toBe(expectedItems);
});
});
});