在Vue 3的组合式API单元测试中,发现在onMounted()钩子中未定义$route
<p>我在我的组件的 <code>setup()</code> 函数中有一个 <code>onMounted()</code> 钩子,它访问了 <code>$route.params</code> 属性,但是当我在测试中模拟 <code>$route</code> 对象时,<code>onMounted()</code> 钩子中的 <code>$route</code> 是 <code>undefined</code>,因此抛出了一个错误。以下是代码:</p>
<p><strong>Component.vue:</strong></p>
<pre class="brush:php;toolbar:false;"><template>
<div>{{ this.$route.params.id }}</div>
</template>
<script lang="ts">
import {defineComponent, onMounted} from 'vue'
import {useRoute} from "vue-router";
export default defineComponent({
name: 'Component',
setup() {
const route = useRoute()
onMounted(() => {
console.log(route.params.id)
})
return {}
}
})
</script></pre>
<p><strong>组件.spec.ts:</strong></p>
<pre class="brush:php;toolbar:false;">import {mount} from "@vue/test-utils";
import Component from "@/views/Bundle/Component.vue";
test('test description', async () => {
const mockRoute = {
params: {
id: 1
}
}
const mockRouter = {
push: jest.fn()
}
const wrapper = mount(Component, {
global: {
mocks: {
$route: mockRoute,
$router: mockRouter
}
}
})
await wrapper.find('button').trigger('click')
})</pre>
<p><strong>抛出错误:</strong> 类型错误:无法读取未定义的属性“params”</p>
<p>我使用的是 vue-test-utils 2.0.0-rc.12 版本。</p>
<p>任何帮助将不胜感激</p>