在Vue 3的組合式API單元測試中,發現在onMounted()鉤子中未定義$route
P粉668146636
P粉668146636 2023-08-26 08:54:29
0
1
494
<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} 從 "@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>
P粉668146636
P粉668146636

全部回覆(1)
P粉739079318

問題在於使用組合API時,掛載選項(因此也包含$route和$router的模擬)不會被考慮。

例如,當你查看路由的matched屬性(在元件中),陣列將為空,因為沒有匹配的路由,也沒有可用的路由上下文。但他們更新了文檔,你可以在那裡看到一個例子。

不知道有沒有非命令式的方式來模擬每個測試...

使用組合API的模擬路由

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板