【发布时间】:2021-04-14 02:12:41
【问题描述】:
我有一个非常简单的组件来解释我的问题。 当我在观察者中使用 setTimeout 时,测试不会按预期运行。
ComponentTest.vue:
<template>
<input v-model="value" type="text">
</template>
<script>
export default {
name: 'ComponentTest',
data() {
return {
value: '',
valueHasChanged: false
};
},
watch: {
value() {
console.log('value has changed');
setTimeout(() => {
console.log('timeout in watcher');
this.valueHasChanged = true;
}, 0);
}
},
created() {
setTimeout(() => {
console.log('timeout in created method');
}, 2000);
this.$watch('value', () => {
setTimeout(() => {
console.log('timeout in created method in $watch');
this.valueHasChanged = true;
}, 0);
});
}
};
</script>
ComponentTest.spec.ts:
import { shallowMount } from '@vue/test-utils';
import ComponentTest from './ComponentTest.vue';
beforeEach(() => {
jest.useFakeTimers();
});
describe('ComponentTest', () => {
it('should test', () => {
const wrapper: any = shallowMount(ComponentTest, {});
wrapper.vm.value = 'test';
wrapper.vm.value = 'test1';
jest.advanceTimersByTime(100000);
expect(wrapper.vm.valueHasChanged).toBe(true);
});
});
valueHasChanged 状态在测试中不会改变,即使我使用了假计时器。而且我没有看到观察者内部的任何 console.log。
这是来自 vue-test-utils(或 jest)的错误,还是我遗漏了什么?
【问题讨论】:
标签: javascript vue.js jestjs vue-test-utils