Выпуск
Строка кода должна запускаться во время выполнения теста , чтобы включить его в покрытие кода Jest
.
Подробности
Две строки без покрытия - это обратные вызовы для Promise
, возвращаемые agent.Gatherings.getAll
.
Promise
обратные вызовы добавляются в очередь PromiseJobs и запустить после завершения текущего сообщения и до запуска следующего сообщения .
Именно поэтому эти строки в настоящее время не включены в покрытие кода ... сейчас онине запускайте, пока не завершится синхронный тест .
Решение
Вам просто нужно убедиться, что эти две строки работают во время выполнения теста .
Подробности
Идеальный подход - await
Promise
непосредственно в вашем тесте .
В этом случае Promise
нелегко получить из теста, поэтому требуется другой подход.
Обходной путь
Если agent.Gatherings.getAll
смоделированы для немедленного разрешения или отклонения, то обратный вызов Promise
будет поставлен в очередь в PromiseJobs к тому времени, когда компонент завершит рендеринг.
Чтобы разрешить Promise
Для выполнения обратного вызова используйте тестовую функцию async
и вызовите await Promise.resolve();
, который, по сути, ставит в очередь оставшуюся часть теста в конце PromiseJobs и позволяет сначала запускать все ожидающие задания:
import * as React from 'react';
import { shallow } from 'enzyme';
import { Comp } from './code'; // <= import your component here
import * as agent from './agent';
describe('Component', () => {
let spy;
beforeEach(() => {
spy = jest.spyOn(agent.Gatherings, 'getAll');
})
afterEach(() => {
spy.mockRestore();
})
it('updates when agent.Gatherings.getAll() resolves', async () => { // use an async test function
const response = [ 'gathering 1', 'gathering 2', 'gathering 3' ];
spy.mockResolvedValue(response);
const wrapper = shallow(<Comp />); // render your component
await Promise.resolve(); // let the callback queued in PromiseJobs run
expect(wrapper.state()).toEqual({ gatherings: response }); // SUCCESS
});
it('handles when agent.Gatherings.getAll() rejects', async () => { // use an async test function
spy.mockRejectedValue(new Error());
const wrapper = shallow(<Comp />); // render your component
await Promise.resolve(); // let the callback queued in PromiseJobs run
expect(wrapper.state()).toEqual({ gatherings: [] }); // SUCCESS
});
});
Теперь у вас должно быть покрытие кодана Promise
обратных вызовах в componentDidMount
.