انتقل إلى المحتوى الرئيسي

ستينسل

Stencil هي مكتبة لبناء مكتبات مكونات قابلة لإعادة الاستخدام وقابلة للتوسع. يمكنك اختبار مكونات Stencil مباشرة في متصفح حقيقي باستخدام WebdriverIO ومشغل المتصفح الخاص به.

الإعداد

لإعداد WebdriverIO داخل مشروع Stencil الخاص بك، اتبع التعليمات في وثائق اختبار المكونات لدينا. تأكد من اختيار stencil كإعداد مسبق ضمن خيارات المشغل الخاص بك، على سبيل المثال:

// wdio.conf.js
export const config = {
// ...
runner: ['browser', {
preset: 'stencil'
}],
// ...
}
معلومات

في حالة استخدام Stencil مع إطار عمل مثل React أو Vue، يجب عليك الاحتفاظ بالإعداد المسبق لهذه الأطر.

يمكنك بعد ذلك بدء الاختبارات عن طريق تشغيل:

npx wdio run ./wdio.conf.ts

كتابة الاختبارات

بالنظر إلى أن لديك مكونات Stencil التالية:

./components/Component.tsx
import { Component, Prop, h } from '@stencil/core'

@Component({
tag: 'my-name',
shadow: true
})
export class MyName {
@Prop() name: string

normalize(name: string): string {
if (name) {
return name.slice(0, 1).toUpperCase() + name.slice(1).toLowerCase()
}
return ''
}

render() {
return (
<div class="text">
<p>Hello! My name is {this.normalize(this.name)}.</p>
</div>
)
}
}

render

في اختبارك استخدم طريقة render من @wdio/browser-runner/stencil لإرفاق المكون بصفحة الاختبار. للتفاعل مع المكون، نوصي باستخدام أوامر WebdriverIO لأنها تتصرف بطريقة أقرب إلى تفاعلات المستخدم الفعلية، على سبيل المثال:

app.test.tsx
import { expect } from '@wdio/globals'
import { render } from '@wdio/browser-runner/stencil'

import MyNameComponent from './components/Component.tsx'

describe('Stencil Component Testing', () => {
it('should render component correctly', async () => {
await render({
components: [MyNameComponent],
template: () => (
<my-name name={'stencil'}></my-name>
)
})
await expect($('.text')).toHaveText('Hello! My name is Stencil.')
})
})

خيارات Render

توفر طريقة render الخيارات التالية:

components

مصفوفة من المكونات للاختبار. يمكن استيراد فئات المكونات إلى ملف الاختبار، ثم يجب إضافة مرجعها إلى مصفوفة component لاستخدامها طوال الاختبار.

النوع: CustomElementConstructor[]
القيمة الافتراضية: []

flushQueue

إذا كانت false، لا تقم بتنظيف قائمة انتظار العرض عند الإعداد الأولي للاختبار.

النوع: boolean
القيمة الافتراضية: true

template

JSX الأولي المستخدم لإنشاء الاختبار. استخدم template عندما تريد تهيئة مكون باستخدام خصائصه، بدلاً من سمات HTML الخاصة به. سيقوم بعرض القالب المحدد (JSX) في document.body.

النوع: JSX.Template

html

HTML الأولي المستخدم لإنشاء الاختبار. يمكن أن يكون هذا مفيدًا لبناء مجموعة من المكونات التي تعمل معًا وتعيين سمات HTML.

النوع: string

language

يعين سمة lang المحاكاة على <html>.

النوع: string

autoApplyChanges

بشكل افتراضي، يجب أن تنتظر أي تغييرات على خصائص المكونات وسماتها env.waitForChanges() لاختبار التحديثات. كخيار، يقوم autoApplyChanges بتنظيف قائمة الانتظار باستمرار في الخلفية.

النوع: boolean
القيمة الافتراضية: false

attachStyles

بشكل افتراضي، لا يتم إرفاق الأنماط بـ DOM ولا تنعكس في HTML المسلسل. سيؤدي تعيين هذا الخيار إلى true إلى تضمين أنماط المكون في الإخراج القابل للتسلسل.

النوع: boolean
القيمة الافتراضية: false

بيئة Render

تعيد طريقة render كائن بيئة يوفر مساعدات معينة لإدارة بيئة المكون.

flushAll

بعد إجراء تغييرات على مكون، مثل تحديث خاصية أو سمة، لا تطبق صفحة الاختبار التغييرات تلقائيًا. للانتظار وتطبيق التحديث، قم باستدعاء await flushAll()

النوع: () => void

unmount

يزيل عنصر الحاوية من DOM.

النوع: () => void

styles

جميع الأنماط المحددة بواسطة المكونات.

النوع: Record<string, string>

container

عنصر الحاوية الذي يتم فيه عرض القالب.

النوع: HTMLElement

$container

عنصر الحاوية كعنصر WebdriverIO.

النوع: WebdriverIO.Element

root

المكون الجذر للقالب.

النوع: HTMLElement

$root

المكون الجذر كعنصر WebdriverIO.

النوع: WebdriverIO.Element

waitForChanges

طريقة مساعدة للانتظار حتى يكون المكون جاهزًا.

import { render, waitForChanges } from '@wdio/browser-runner/stencil'
import { MyComponent } from './component.tsx'

const page = render({
components: [MyComponent],
html: '<my-component></my-component>'
})

expect(page.root.querySelector('div')).not.toBeDefined()
await waitForChanges()
expect(page.root.querySelector('div')).toBeDefined()

تحديثات العناصر

إذا قمت بتحديد خصائص أو حالات في مكون Stencil الخاص بك، فيجب عليك إدارة وقت تطبيق هذه التغييرات على المكون ليتم إعادة عرضه.

أمثلة

يمكنك العثور على مثال كامل لمجموعة اختبار المكونات WebdriverIO لـ Stencil في مستودع الأمثلة الخاص بنا.

Welcome! How can I help?

WebdriverIO AI Copilot