我正在嘗試爲需要在其componentWillMount
方法中完成異步操作的React組件編寫測試。 componentWillMount
調用一個函數,作爲道具傳遞,返回一個承諾,並在我的測試中嘲笑這個函數。Jest:測試無法在setImmediate或process.nextTick回調中失敗
這工作正常,但如果測試在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);
}
});
玩笑v18.1.0
節點v6.9.1
有你閱讀測試異步東西的文檔(http://facebook.github.io /jest/docs/tutorial-async.html#content)? –
是的,我沒有測試一個異步函數,我正在測試一個需要等待承諾的組件。 –
但是你創造了一個承諾,即使你在測試中解決它,它在測試運行中也沒有任何影響,你至少需要從測試中返回承諾。 –