第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

測試 Vuetify (Vue.js) - 第二次調(diào)用掛載引發(fā)錯誤

測試 Vuetify (Vue.js) - 第二次調(diào)用掛載引發(fā)錯誤

qq_笑_17 2022-01-13 15:20:17
我目前在測試我的 Vue 應(yīng)用程序時遇到了一種行為(特別是在包含 vuetify 時)。我使用 Jest 作為測試運行程序,但使用 mocha 時遇到了相同的行為。首先要注意的是,這個問題只發(fā)生在 @vue/test-utils 的 mount 而不是 shallowMount。此外,它僅在您使用 mount 兩次時才會發(fā)生(我猜原因是 Vue 對象的污染,但稍后會更多)?,F(xiàn)在我的組件只是一個基本的v-data-table的包裝器,其屬性值綁定到它的項目和一些用于復選框而不是文本的自定義插槽?,F(xiàn)在的問題。首先,這是我的測試的第一個變體的樣子(基本上是 vuetify 推薦的方式??纯催@里。由于測試本身并不重要,我只希望 true 在這里是真的import Vue from 'vue';import Vuetify from 'vuetify';import { mount, createLocalVue, shallowMount } from '@vue/test-utils';import  PermissionTable from '@/components/PermissionTable.vue';import { expect } from 'chai';const localVue = createLocalVue();// Vue.use is not in the example but leaving it will cause the error that // the data table is not registeredVue.use(Vuetify);describe('Permissiontable.vue', () => {  let vuetify;  let tableItems;  beforeEach(() => {    tableItems = [];    vuetify = new Vuetify();  });  it('will test the first thing',() => {    const wrapper = mount(PermissionTable, {      localVue,      vuetify,      propsData: {        value: tableItems      }    });    expect(true).to.be(true);  });  it('will test the second thing',() => {    const wrapper = mount(PermissionTable, {      localVue,      vuetify,      propsData: {        value: tableItems      }    });    expect(true).to.be(true);  });});現(xiàn)在,正如在不使用 Vue.use(Vuetify) 的情況下已經(jīng)評論過的那樣,我將收到組件 v-data-table 未注冊的錯誤。有了它,我剩下以下行為測試第一件事按預期運行并成功第二件事失敗了以下錯誤類型錯誤:無法讀取未定義的屬性“$scopedSlots”并在掛載(....)時失敗。為了使行為更加怪異,如果我在此行進行調(diào)試并停止,請在調(diào)試控制臺中手動運行掛載,它在第一次時也會失敗,并出現(xiàn)相同的錯誤。如果我再次運行它,它會起作用。例如,如果我執(zhí)行這個測試 4 次,就會發(fā)生這種情況。第一次成功->第二次失敗->第三次和第四次再次成功?,F(xiàn)在我確信如果函數(shù)獲得相同的輸入,它們的行為方式相同。所以掛載的輸入必須在第一次調(diào)用時改變。我的猜測是 Vue 類會以某種方式受到污染。因此,如果我查看localVue的文檔,這個實用程序是為了防止對全局 Vue 類的污染。
查看完整描述

2 回答

?
四季花海

TA貢獻1811條經(jīng)驗 獲得超5個贊

壞消息


事實證明,目前這確實是vue-test-utils中的一個錯誤。在我打開問題后,我發(fā)現(xiàn)了另一個與我的問題非常相似的問題,我很確定其根本原因與我的情況相同。顯然這是由于 v.beta.29 中的 vue utils 發(fā)生了變化


問題可以在這里找到#1130


好消息


有一種解決方法可以讓您的測試再次運行,直到此錯誤得到解決。您需要使用選項sync: false進行安裝,因此頂部示例中的安裝看起來像


const wrapper = mount(PermissionTable, {

  localVue,

  vuetify,

  propsData: {

    value: tableItems

  },

  sync: false

});

我仍然認為這是一個嚴重的錯誤,因為無論設(shè)置如何,每次運行它們時相同的測試都應(yīng)該以相同的方式運行。一旦有消息表明該問題已得到解決,我將立即更新此帖子。


查看完整回答
反對 回復 2022-01-13
?
慕容3067478

TA貢獻1773條經(jīng)驗 獲得超3個贊

在您的第一段代碼中唯一看起來不合適的是您正在編寫Vue.use(Vuetify)并且在進行掛載時還使用了 Vuetify 的實例。


我建議Vue.use(Vuetify)您像這樣保留并安裝您的組件:


const wrapper = mount(PermissionTable, {

   localVue,   // vuetify is removed from this object

   propsData: {

     value: tableItems

   }

});

另一方面,單元測試通常應(yīng)該使用shallowMount. 我不知道您的用例,但如果可能,請使用它而不是mount


查看完整回答
反對 回復 2022-01-13
  • 2 回答
  • 0 關(guān)注
  • 417 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號