Vue / المتوسط: حالة الميزة وملكية الأثر / الدرس 12
اختبار المكوّن ومهام المستخدم المتاحة
تحقق من السلوك العام بمدخل وأحداث مضبوطة ثم قيّم الدلالة والتركيز والتفاعل الفعلي منفصلة.
في هذه الصفحة
أهداف الدرس
- اختر فحص الوحدة والمكوّن والمتصفح بحسب الادعاء.
- اختبر العناوين والأخطاء ومهام اللوحة مع البيانات.
اختبر أصغر حد يكشف العيب
تعمل أداة خالصة بـ Node ويحتاج الحدث ربط Vue وقد يحتاج التركيز والتخطيط متصفحاً حقيقياً. تختلف الأسئلة؛ لا تثبت الدالة وصل المعالج ولا اللقطة فهم القارئ. اختر رحلات ممثلة وحالات مركزة واجعل البديل وفياً دون ادعاء اختبار الخلفية. اذكر المنفذ والمتوقع الموثق.
تحقق من عقد حدث المكوّن
تربط Vue Test Utils مكوّن Vue 3 ببيئة متوافقة. يستخدم المثال Vitest وTitleForm السابق، وينتظر setValue وtrigger لمعالجة التحديث. يتحقق من التنقيح والحدث لا الدوام. تختبر السلبية غياب الحدث والخطأ المفيد. تتطلب الاستيرادات اعتماديات وبيئة DOM لا تثبت أو تشغل هنا.
import { mount } from "@vue/test-utils"
import { it, expect } from "vitest"
import TitleForm from "./TitleForm.vue"
it("emits a trimmed title", async () => {
const wrapper = mount(TitleForm)
await wrapper.get("input").setValue(" Notes ")
await wrapper.get("form").trigger("submit")
expect(wrapper.emitted("save-title")).toEqual([["Notes"]])
wrapper.unmount()
})
يتطلب الحزم والتحويل وDOM المتوافقة. المتوقع حمولة Notes ولم ينفذ الاختبار لغياب اعتماديات الإطار بالبيئة المعزولة.
اكشف المعنى نفسه خارج المظهر
استخدم الأصلي والعنوان المرتبط والاسم الوصفي وعلاقة الخطأ، لا اللون وحده. تحتاج النسخ معرفات ثابتة فريدة. تدعم useId في 3.5 الثبات عبر الخادم والعميل بسياقها. تكشف الأدوات فئات ولا تثبت المطابقة أو سهولة المهمة. اختبر التصحيح والإرسال والتنقل بلوحة وتقنية مساعدة.
ابنِ حقلاً بعلاقة خطأ صريحة
يقبل الحقل خطأ وقيمة نموذج مطلوبة ويستخدم المعرف للعنوان والوصف، ويبقى المالك الأب. تدعم النسخة defineModel وتتجنب افتراضاً خاصاً مختلفاً باشتراط القيمة. لا يقرر التحقق أو الدوام. افحص الاسم والحالة والوصف فعلياً؛ تبقى الشيفرة الصحيحة ظاهرياً فرضية حتى التفاعل.
<script setup>
import { useId } from "vue"
const model = defineModel({ type: String, required: true })
const props = defineProps({ error: { type: String, default: "" } })
const inputId = useId()
const errorId = `${inputId}-error`
</script>
<template>
<label :for="inputId">Note title</label>
<input :id="inputId" v-model="model"
:aria-invalid="props.error ? 'true' : undefined"
:aria-describedby="props.error ? errorId : undefined">
<p v-if="props.error" :id="errorId" role="alert">{{ props.error }}</p>
</template>
يتطلب قيمة الأب ومترجم وتشغيل 3.5. لم يشغل متصفح أو محرك وصول، ويحدد المثال العلاقة دون ادعاء إتاحة كاملة من النص.
اضبط الوقت والبيانات ودليل التفاعل
اضبط النتائج والبيانات والتنظيف لا خدمة عامة أو نوم طويل. احفظ الدليل الأول للتذبذب وميّز عيب المنتج والتوقيت والاشتراك. اختبر الخاصية والحمولة والشرط والتكرار عند الملكية وحدد العرض والخط واللغة والمتصفح للمقارنة. يثبت الأخضر الحالات المضبوطة فقط؛ اجمع الآلي ومراجعة المهمة لتظهر الفجوة الحرجة لا تختفي بنسبة.
الأخطاء الشائعة وإصلاحها
يسبق التحقق معالجة التحديث
- لماذا يحدث؟
- يتجاهل الاختبار تحديث المكوّن غير المتزامن.
- كيف تصلحه؟
- انتظر التفاعل الموثق والعمل المناسب.
- كيف تتجنب تكراره؟
- استخدم حدوداً حتمية لا نوماً.
تشترك الحقول بهدف عنوان واحد
- لماذا يحدث؟
- أعيد id ثابت عبر النسخ.
- كيف تصلحه؟
- ولد معرفات ثابتة فريدة وتحقق من العلاقة.
- كيف تتجنب تكراره؟
- اختبر نسخاً متعددة وسلوك SSR.
يسمى نجاح الفحص وصولاً كاملاً
- لماذا يحدث؟
- اختلط نطاق الأداة بالمهمة كاملة.
- كيف تصلحه؟
- راجع اللوحة والتركيز والتقنية صراحة.
- كيف تتجنب تكراره؟
- حدد حدود الآلي ودليل اليدوي.
اختبر فهمك
1. يثبت الاختبار حدث العنوان. هل يثبت حفظ الخادم؟
اعرض الحل المشروح
لا؛ يتحقق من المقترح بالبيئة. يحتاج تكامل الأب والخدمة وتحقق الخادم وتفويضه ودوامه أدلة أخرى. افصل الانتظار والتأكيد.
2. خطأ النموذج أحمر بلا نص. ماذا يضاف؟
اعرض الحل المشروح
أضف رسالة مرتبطة وحالة غير صالح وتصحيحاً قابلاً للاستخدام، وتحقق باللوحة والتقنية لا افتراض إدراك اللون للجميع.
أهم ما تعلمته
- يحدد حد الاختبار معنى النجاح.
- تدخل الدلالة والتركيز والخطأ بالعقد العام.
- تكمل الأتمتة تحقق المهمة.