У меня есть довольно простой компонент React, который отображает последовательность точек для того, когда что-то загружается, по умолчанию он отображает до 3 точек и шаг увеличивается на интервале, установленном в функции componentDidMount
, сбрасываясь по числуточек.Количество точек и интервал могут быть перезаписаны путем пропускания реквизита.Этот компонент находится ниже.
import * as React from 'react';
export interface Props {
interval?: number;
dots?: number;
}
class LoadingDots extends React.Component<Props, object> {
public static defaultProps: Partial<Props> = {
interval: 300,
dots: 3
};
interval: any;
state = {
frame: 1,
interval: this.props.interval,
dots: this.props.dots
}
componentDidMount = () => {
this.interval = setInterval(() => {
this.setState({
frame: this.state.frame + 1
});
}, this.props.interval);
}
componentWillUnmount() {
clearInterval(this.interval);
}
public render() {
let dots = this.state.frame % (this.props.dots + 1);
let text = "";
while (dots > 0) {
text += ".";
dots--;
}
return (
<p className="loadingDots" {...this.props}>{text}</p>
)
}
}
export default LoadingDots;
Проблема, с которой я сейчас сталкиваюсь, заключается в тестировании этого компонента в соответствии с документами Jest и Проверка реакции Jest: проверка состояния после задержки Я написал тест ниже, чтобы проверить правильное число точек по умолчанию, отображаемых в конце набора кадров (пройдет с задержкой 200 мс).
test('LoadingDots by default renders with 3 dots', () => {
var loadingDots = Enzyme.shallow(<LoadingDots interval={100} />);
jest.useFakeTimers();
jest.runAllTimers();
setTimeout(() => {
expect(loadingDots.find('p').text()).toBe("...")
}, 300);
});
Этот тест проходит, но не должен, он проходит независимо от того, какое значение я положил в .ToBe
из expect(loadingDots.find('p').text()).toBe("...")
.
Я пытался отобразить компонент как var loadingDots = Enzyme.mount();
и var loadingDots = Enzyme.render();
, но результат все тот же, кто-нибудь видит, что здесь происходит не так?Как я могу заставить это работать правильно?