Javascript 一种更优雅的方式来测试摩卡咖啡的时间流逝
我最近不得不用一个旧的react组件修复一个bug。通常在修复bug时,我们会用它编写一个测试。问题是,react组件从服务器进行异步获取(我可以重构代码,以便将异步操作移到redux中,但我们不会将重构作为bug修复的一部分),因此在测试组件应该呈现的内容时,我必须等待Javascript 一种更优雅的方式来测试摩卡咖啡的时间流逝,javascript,mocha.js,enzyme,Javascript,Mocha.js,Enzyme,我最近不得不用一个旧的react组件修复一个bug。通常在修复bug时,我们会用它编写一个测试。问题是,react组件从服务器进行异步获取(我可以重构代码,以便将异步操作移到redux中,但我们不会将重构作为bug修复的一部分),因此在测试组件应该呈现的内容时,我必须等待500ms,以允许承诺得到解决 我知道如果我创建一个组件实例并直接调用该方法,我就不必执行setTimeout,我可以执行。然后,但我们喜欢在不调用内部方法的情况下测试组件的输入/输出 有比设置超时更优雅的解决方案吗?以下是当前
500ms
,以允许承诺得到解决
我知道如果我创建一个组件实例并直接调用该方法,我就不必执行setTimeout,我可以执行。然后,但我们喜欢在不调用内部方法的情况下测试组件的输入/输出
有比设置超时更优雅的解决方案吗?以下是当前代码:
it('autofills and locks all the fields where user data is present', function(done) {
const emailInput = $wrapper.find('#email');
emailInput.value = 'email@example.com';
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);
});
“在这里,我们不把重构作为bug修复的一部分”。。。哇
无论如何,如果您需要编写一个测试来完成您的工作,那么您将需要模拟您的API调用。只要网络有点慢,500毫秒超时就会失败,这是一个非常脆弱的测试
因为您没有详细说明请求是如何发出的,所以我不能告诉您任何其他内容,但是您会发现所有HTTP请求风格的模拟库:fetch mock for fetch,nock。。。有很多
我们的想法是,您应该预先设置一个假答案,并立即返回(如果需要,可以使用Promise.resolve())