Saya menggunakan vue test utils untuk menguji komponen dan mendapat ralat ini semasa cuba menguji teks. Tidak dapat memanggil teks pada DOMWrapper kosong.
Kod dikemas kini. "RangeError: Saiz tindanan panggilan maksimum melebihi" dalam ujian atable.spec.ts.
atable.spec.ts
import ATable from "../components/ATable.vue"; import { IPatientResponse } from "@/types/patients"; import { shallowMount, RouterLinkStub } from "@vue/test-utils"; it("renders proper texts.", () => { const wrapper = shallowMount(ATable, { props: { patients: [ { id: 1, firstName: "arpit", lastName: "satyal", email: "arpited7@gmail.com", contact: "12345", address: "ktm", dob: "1998-07-29", allergies: ["Pet allergies"], }, ] as IPatientResponse[], }, stubs: { RouterLink: RouterLinkStub, }, scopedSlots: { bodyCell: ` <template slot-scope="{ column, record }" v-if="column.key === 'firstName'"> <router-link :to="{ name: 'PatientProfile', params: { id: record.id } }"> <div id="test-patient">{{ record.firstName }} {{ record.lastName }}</div> </router-link> </template>`, } }); const patientNameSelector = wrapper.find("#test-patient"); // see if the message renders expect(patientNameSelector.text()).toEqual("arpit satyal"); });
Pandangan meja Faktorkan semula komponen jadual ke dalam komponennya sendiri. Ia kini menerima prop daripada komponen papan pemuka.
<!-- eslint-disable vue/multi-word-component-names --> <template> <section> <a-table :columns="columns" :data-source="patients" :pagination="false"> <template #bodyCell="{ column, record }"> <template v-if="column.key === 'firstName'"> <router-link :to="{ name: 'PatientProfile', params: { id: record.id } }"> <span id="test-patient">{{ record.firstName }} {{ record.lastName }}</span> </router-link> </template> <template v-else-if="column.key === 'specialAttention'"> <span class="pointer"> <EyeOutlined v-if="record.specialAttention" @click="markAsSpecial(record, false)" class="iconStyle" /> <EyeInvisibleOutlined v-else @click="markAsSpecial(record, true)" class="iconStyle" /> </span> </template> <template v-else-if="column.key === 'action'"> <span class="pointer"> <router-link :to="{ name: 'UpdatePatient', params: { id: record.id } }"> <EditOutlined style="margin-right: 10px" class="iconStyle" /> </router-link> <a-divider type="vertical" /> <DeleteOutlined @click="deletePatient(record.id)" class="iconStyle" /> <a-divider type="vertical" /> </span> </template> </template> </a-table> </section> </template> <script lang="ts"> import { EditOutlined, DeleteOutlined, EyeInvisibleOutlined, EyeOutlined, } from "@ant-design/icons-vue"; import { defineComponent } from "@vue/runtime-core"; const columns = [ { title: "Name", dataIndex: "firstName", key: "firstName", align: "center", }, { title: "Contact", dataIndex: "contact", key: "contact", align: "center", }, { title: "Address", dataIndex: "address", key: "address", align: "center", }, { title: "DOB", key: "dob", dataIndex: "dob", align: "center", }, { title: "Special Attention", key: "specialAttention", align: "center", }, { title: "Actions", key: "action", align: "center", }, ]; export default defineComponent({ props: ["deletePatient", "markAsSpecial", "patients"], components: { EditOutlined, DeleteOutlined, EyeInvisibleOutlined, EyeOutlined, }, data() { return { columns, }; }, }); </script>
Anda sedang menguji komponen Papan Pemuka dan cuba menyemak sama ada komponen ATable (
) memaparkan kandungan slot yang dihantar kepadanya. Ini adalah salah. Memandangkan komponen ATable, perkara yang perlu anda semak semasa menguji komponen Dashboard ialah sama ada komponen ATable baru sahaja dipaparkan. Itu sahaja.Anda harus meninggalkan ujian kandungan slot ATable kepada menguji komponen ATable, bukan Papan pemuka komponen.