我是Jest/React初學者。在jest的it
我需要等到所有的承諾已經執行之前,實際檢查。如何對提取完成後呈現的React組件進行單元測試?
我的代碼是與此類似:
export class MyComponent extends Component {
constructor(props) {
super(props);
this.state = { /* Some state */ };
}
componentDidMount() {
fetch(some_url)
.then(response => response.json())
.then(json => this.setState(some_state);
}
render() {
// Do some rendering based on the state
}
}
當組件被安裝時,render()
運行兩次:構造運行後一次,並且之後一旦fetch()
(在componentDidMount()
)飾面和鏈接的承諾完成執行) 。
我的測試代碼是與此類似:
describe('MyComponent',() => {
fetchMock.get('*', some_response);
it('renders something',() => {
let wrapper = mount(<MyComponent />);
expect(wrapper.find(...)).to.have.something();
};
}
無論我從it
返回,在第一次運行後render()
執行,但第二次了。例如,如果我返回fetchMock.flush().then(() => expect(...))
,則在第二次致電render()
(我相信我能理解爲什麼)之前執行返回的承諾。
我該如何等待,直到第二次render()
在運行之前調用expect()
?
這聽起來像你想在一次測試中測試太多東西。你想要測試的是當組件裝入時調用你的讀取函數,然後你有多個其他測試顯式地傳遞給它們,你可以檢查組件是否被正確渲染。 –
@MattWatson如果我檢查(1)fetch函數被調用,並且(2)傳遞狀態正確渲染,那麼我沒有檢查(1.5)狀態是否設置正確。我將如何檢查狀態設置是否正確? –