Stencil
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:
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, так как они ближе к реальным пользовательским взаимодействиям, например:
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 предоставляет следующие опции:
components
Массив компонентов для тестирования. Классы компонентов можно импортировать в файл спецификации, затем их ссылки следует добавить в массив component для использования в течение теста.
Тип: CustomElementConstructor[]
По умолчанию: []
flushQueue
Если false, не очищать очередь рендеринга при начальной настройке теста.
Тип: boolean
По умолчанию: true
template
Начальный JSX, который используется для создания теста. Используйте template, когда вы хотите инициализировать компонент, используя их свойства, а не их HTML-атрибуты. Он отобразит указанный шаблон (JSX) в document.body.
Тип: JSX.Template
html
Начальный HTML, используемый для создания теста. Это может быть полезно для создания набора компонентов, работающих вместе, и назначения HTML-атрибутов.
Тип: string
language
Устанавливает имитированный атрибут lang на <html>.
Тип: string