У меня есть componentDidMount, который выполняет fetchUser()
. Я пытаюсь проверить это componentDidMount
.
Код компонента:
static propTypes = {
match: PropTypes.shape({
isExact: PropTypes.bool,
params: PropTypes.object,
path: PropTypes.string,
url: PropTypes.string
}),
label: PropTypes.string,
actualValue: PropTypes.string,
callBack: PropTypes.func
};
state = {
user: {}
};
componentDidMount() {
this.fetchUser();
}
getUserUsername = () => {
const { match } = this.props;
const { params } = match;
return params.username;
};
fetchUser = () => {
getUser(this.getUserUsername()).then(username => {
this.setState({
user: username.data
});
});
};
Тест:
it('should call fetchUsers function only once', () => {
const match = { params: { username: 'testUser' }, isExact: true, path: '', url: '' };
const fetchUserFn = jest.fn(match);
const wrapper = shallow(<UserDetailsScreen match={match} fetchUsers={fetchUserFn} />);
wrapper.instance().componentDidMount(match);
expect(fetchUserFn).toHaveBeenCalledTimes(1); // I get expected 1 and got 0
});
Я имею в виду, почему это componentDidMount()
, тестирование отличается от моих других? За последние несколько недель я проверил довольно много из них, никогда не сталкивался с этой проблемой. Может быть, потому что getUser()
- это обещание, и мне нужно его издеваться. Кто-нибудь сталкивался с чем-то подобным раньше?
Код для getUser()
export const getUser = username => {
const options = {
method: httpMethod.GET,
url: endpoint.GET_USER(username)
};
return instance(options);
};