我正在尝试测试我的应用程序在连续两次 tick 上发生的情况。这是我目前所拥有的(测试在 karma devtools 中失败,但在命令行中失败):
import { mount } from 'avoriaz';
import MyComponent from './MyComponent';
describe('testing', function() {
it('should do something', (done) => {
const wrapper = mount(MyComponent, { store });
wrapper.vm.changeData();
Vue.nextTick(() => {
expect(wrapper.vm.something).to.eql(somethingElse);
wrapper.vm.changeData();
Vue.nextTick(() => {
expect(wrapper.vm.something2).to.eql(somethingElse2);
done();
});
done();
});
});
});
我也尝试过使用 then()
和 catch()
,但 karma 仍然认为我失败的测试通过了。
我应该只调用一次 done()
吗?我不太确定这个回调在做什么。
最佳答案
如图所示here ,还有一个更好的解决方案,可以防止 Error: Timeout of 2000ms exceeded。对于异步测试和 Hook ,确保调用“done()”;如果返回一个 Promise,请确保它已解析。
:
it('should do something', (done) => {
const wrapper = mount(MyComponent, { store });
wrapper.vm.changeData();
Vue.nextTick(() => {
expect(wrapper.vm.something).to.eql(somethingElse);
wrapper.vm.changeData();
Vue.nextTick().then(() => {
expect(wrapper.vm.something2).to.eql(somethingElse2);
}).then(done, done);
});
});
我也想使用 async/await
版本,但我无法让它工作。
关于testing - 测试时如何嵌套Vue.nextTick?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44442757/