پرش به محتوای اصلی

استنسیل

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

آرایه‌ای از مؤلفه‌ها برای آزمایش. کلاس‌های مؤلفه می‌توانند به فایل spec وارد شوند، سپس مرجع آنها باید به آرایه 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