Я пытаюсь написать тест для компонента React, который должен завершить асинхронное действие в своем методе componentWillMount
. componentWillMount
вызывает функцию, переданную в качестве опоры, которая возвращает обещание, и я издеваюсь над этой функцией в своем тесте.Jest: тесты не могут терпеть неудачу в пределах setImmediate или process.nextTick callback
Это нормально работает, но если тест не выполняется при вызове setImmediate
или process.nextTick
, исключение не обрабатывается Jest, и оно выходит преждевременно. Ниже вы можете видеть, что я даже пытаюсь поймать это исключение, но безуспешно.
Как я могу использовать что-то вроде setImmediate
или nextTick
с Jest? Принятый ответ на этот вопрос - это то, что я пытаюсь реализовать безуспешно: React Enzyme - Test `componentDidMount` Async Call.
it('should render with container class after getting payload', (done) => {
let resolveGetPayload;
let getPayload = function() {
return new Promise(function (resolve, reject) {
resolveGetPayload = resolve;
});
}
const enzymeWrapper = mount(<MyComponent getPayload={getPayload} />);
resolveGetPayload({
fullname: 'Alex Paterson'
});
try {
// setImmediate(() => {
process.nextTick(() => {
expect(enzymeWrapper.hasClass('container')).not.toBe(true); // Should and does fail
done();
});
} catch (e) {
console.log(e); // Never makes it here
done(e);
}
});
Jest v18.1.0
Узел v6.9.1
вы читали документацию о тестировании асинхронном материала (http://facebook.github.io /jest/docs/tutorial-async.html#content)? –
Да, я не тестирую асинхронную функцию, я тестирую компонент, который должен ждать обещания. –
Но вы создаете обещание, и даже вы разрешаете его в тесте, он не будет иметь никакого эффекта в тестовом прогоне, вам нужно хотя бы вернуть обещание от теста. –