Я тестирую реактивный компонент, в котором импортируется зависимость (с именем import и async), которая выполняет некоторую логику и просто возвращает логическое значение, но я думаю, что шутка не ждет ее завершения. который также регистрирует ошибку.
«Jest не завершил работу ни через секунду после завершения тестового запуска.
Обычно это означает наличие асинхронных операций, которые не были остановлены в ваших тестах. Попробуйте запустить Jest с помощью --detectOpenHandles, чтобы устранить эту проблему».
в настоящее время это реализация, которую я пробовал.
это код теста
// OfflineNotice.test.js
import React from 'react';
import { OfflineNotice } from './OfflineNotice';
jest.mock('../../service/user', () => ({
__esModule: true,
checkIfConnectivityIsValid: () => (
Promise.resolve(true)
),
}));
describe('<OfflineNotice/> test suite', () => {
const mockOnNetworkConnected = jest.fn();
test('it should render <OfflineNotice/> component', () => {
const wrapper = shallow(
<OfflineNotice
onNetworkConnected = {mockOnNetworkConnected}
network = {{
isConnected: true,
connectionType: 'value',
}}
/>,
);
expect(wrapper).toBeDefined();
});
});
код компонента, который я тестировал
// the dependency i need to mock
import { checkIfConnectivityIsValid } from '../../service/user';
// the implementation is as follows
export class OfflineNotice extends PureComponent {
componentWillMount() {
const { network } = this.props;
const { isConnected, connectionType } = network;
this.handleConnectivityChange(isConnected, connectionType);
}
componentDidUpdate() {
const { network } = this.props;
const { isConnected, connectionType } = network;
this.handleConnectivityChange(isConnected, connectionType);
}
handleConnectivityChange = async (isConnected, connectionType) => {
const { onNetworkConnected } = this.props;
// how the service was used only returns boolean
const isValid = await checkIfConnectivityIsValid(connectionType);
let status = null;
let message = null;
if (isConnected && isValid) {
status = 'online';
message = string.NETWORK_MESSAGE.AVAILABLE;
this.fadeOut();
onNetworkConnected();
} else if (isConnected) {
status = 'invalid';
message = string.NETWORK_MESSAGE.INVALID;
this.containerOpacity.setValue(1);
} else {
status = 'offline';
message = string.NETWORK_MESSAGE.NO_INTERNET;
this.containerOpacity.setValue(1);
}
this.setState({ status, message });
};
затем запуск теста может отобразить компонент. хотя при покрытии кода код останавливается на "const isValid = await checkIfConnectivityIsValid(connectionType);" часть, в которой говорится, что заявление вперед не распространяется.
Кроме того, можете ли вы протестировать его без добавления каких-либо побочных эффектов в componentWillMount? Это действительно должно работать
Мне трудно воссоздать проблему, можете ли вы предоставить минимальный, полный и проверяемый пример?
@jgoday я использую последнюю версию jest 24.1.
@brian-lives-outdoors да, я уже удалил часть кода, которая, похоже, не является частью проблемы..





Какую версию шутки вы используете?