我最近不得不在工作中修復一箇舊的反應組件。通常在修復一個bug時,我們會用它來寫一個測試。問題是,響應組件會從服務器進行異步提取(我可以重構代碼,這樣異步操作就會移入到redux中,但我們不會在這裏進行重構,作爲bug修復的一部分),所以當測試組件是什麼時應該呈現,我不得不等待500ms
允許承諾解決。一種更優雅的測試摩卡時間的方法
我知道如果我創建組件的一個實例並直接調用方法,我就不必做setTimeout,我可以做一個.then
,但我們希望測試組件的輸入/輸出而不調用內部方法。
有沒有比設置超時更優雅的解決方案?這裏是當前的代碼:
it('autofills and locks all the fields where user data is present', function(done) {
const emailInput = $wrapper.find('#email');
emailInput.value = '[email protected]';
emailInput.simulate('blur');
// - autofill does an async request
// - we need to wait for the promise to resolve before
// checking if the inputs are disabled or not
setTimeout(() => {
const identifierInput = $wrapper.find('#id');
const lastNameInput = $wrapper.find('#last-name');
const phoneNumberInput = $wrapper.find('#phone-number');
const firstNameInput = $wrapper.find('#first-name');
expect(firstNameInput.html().includes('disabled')).to.be.true;
expect(lastNameInput.html().includes('disabled')).to.be.true;
expect(phoneNumberInput.html().includes('disabled')).to.be.true;
expect(identifierInput.html().includes('disabled')).to.be.true;
done();
}, 500);
});