API
@testing-library/svelte
は、@testing-library/dom
からすべてを再エクスポートし、さらに
render
Svelteを使用して、コンポーネントをDOMにレンダリングします。デフォルトでは、コンポーネントはdocument.body
に追加された<div>
にレンダリングされます。
import {render} from '@testing-library/svelte'
import MyComponent from './MyComponent.svelte'
const result = render(MyComponent, componentOptions, renderOptions)
コンポーネントオプション
コンポーネントの作成方法とマウント方法をカスタマイズできます。これらのオプションは、Svelteに直接渡されます。
コンポーネントにpropsを送信するだけでよい場合は、propsを直接渡すことができます。ただし、propsの名前がコンポーネントオプションの名前と重複しないようにしてください。
// pass props to the component
render(YourComponent, {myProp: 'value'})
// pass props and other options to the component
render(YourComponent, {
props: {myProp: 'value'},
context: new Map([[('theme': 'dark')]]),
})
最も一般的なオプションは次のとおりです。
オプション | 説明 | デフォルト |
---|---|---|
props | コンポーネントに渡すprops。 | N/A |
context | コンポーネントのレンダリングに使用するコンテキスト値のMap 。 | N/A |
target | コンポーネントをレンダリングするHTMLElement 。 | document.body に追加された<div> |
target
オプションを指定すると、target
要素は自動的にdocument.body
に追加されません。また、バインドされたクエリとdebug
のベース要素として使用されます。
利用可能なすべてのオプションについては、SvelteクライアントサイドコンポーネントAPIドキュメントを参照してください。
レンダーオプション
Svelte Testing Libraryがコンポーネントをレンダリングする方法もカスタマイズできます。ほとんどの場合、これらのオプションを変更する必要はありません。
@testing-library/svelte@5.0.0
より前は、baseElement
オプションはcontainer
という名前でした。
オプション | 説明 | デフォルト |
---|---|---|
baseElement | クエリとdebug のベース要素。 | componentOptions.target ?? document.body |
クエリ | カスタムクエリ. | N/A |
レンダー結果
結果 | 説明 |
---|---|
baseElement | クエリに使用されるベースDOM要素。 |
component | マウントされたSvelteコンポーネント。 |
container | コンポーネントがマウントされるDOM要素。 |
debug | prettyDOM を使用して要素をログに記録します。 |
rerender | コンポーネントのpropsを更新します。 |
unmount | コンポーネントをアンマウントして破棄します。 |
...queries | クエリ関数はbaseElement にバインドされています。 |
baseElement
@testing-library/svelte@5.0.0
で追加
クエリがバインドされるベースDOM要素。renderOptions.baseElement
に対応します。componentOptions.target
もrenderOptions.baseElement
も使用しない場合、これはdocument.body
になります。
container
コンポーネントがマウントされるDOM要素。componentOptions.target
に対応します。一般に、要素のクエリにcontainer
を直接使用することは避けてください。代わりに、testing-libraryのクエリを使用してください。
container.firstChild
を使用して、コンポーネントの最初にレンダリングされた要素を取得します。
@testing-library/svelte@5.0.0
より前は、container
がベース要素に設定されていました。以前のバージョンでコンポーネントの最初にレンダリングされた要素を取得するには、container.firstChild.firstChild
を使用してください。
component
Svelteコンポーネントのインスタンス。詳細については、SvelteコンポーネントAPIを参照してください。
エクスポートされた関数など、開発者向けのAPIをテストする場合を除き、component
の使用は避けてください。代わりに、DOMと対話してください。エンドユーザーと開発者ユーザーの違いを理解するために、Kent C. Doddsによるテストユーザーを避けるをお読みください。
debug
prettyDOM
を使用して、baseElement
または指定された要素をログに記録します。
baseElement
がデフォルトのdocument.body
の場合、screen.debug
を使用することをお勧めします。
import {render, screen} from '@testing-library/svelte'
const {debug} = render(MyComponent, {myProp: 'value'})
const button = screen.getByRole('button')
// log `document.body`
screen.debug()
// log your custom `target` or `baseElement`
debug()
// log a specific element
screen.debug(button)
debug(button)
rerender
コンポーネントの1つ以上のpropsを更新し、Svelteが更新されるのを待ちます。
const {rerender} = render(MyComponent, {myProp: 'value'})
await rerender({myProp: 'new value'}))
@testing-library/svelte@5.0.0
より前は、rerender
を呼び出すと、コンポーネントが破棄されて再マウントされていました。以前のバージョンでpropsを更新するには、component.$set
とact
を使用してください。
const {component} = render(MyComponent, {myProp: 'value'})
await act(() => component.$set({myProp: 'new value'}))
unmount
Svelteコンポーネントをアンマウントして破棄します。
const {unmount} = render(MyComponent, {myProp: 'value'})
unmount()
クエリ
クエリ関数はbaseElement
にバインドされています。render
にカスタムクエリを渡した場合、デフォルトのクエリの代わりにそれらが使用可能になります。
baseElement
がデフォルトのdocument.body
の場合、バインドされたクエリではなく、screen
を使用することをお勧めします。
import {render, screen} from '@testing-library/svelte'
const {getByRole} = render(MyComponent, {myProp: 'value'})
// query `document.body`
const button = screen.getByRole('button')
// query using a custom `target` or `baseElement`
const button = getByRole('button')
cleanup
すべてのコンポーネントを破棄し、document.body
に追加された要素を削除します。
テストフレームワークがグローバルなafterEach
メソッド(例:Mocha、Jest、またはJasmine)を追加した場合、またはVitestセットアップファイルでimport '@testing-library/svelte/vitest'
を使用した場合は、cleanup
が自動的に呼び出されます。通常、cleanup
を自分で呼び出す必要はありません。
グローバルなafterEach
メソッドを使用するフレームワークで自動cleanupを無効にする場合は、process.env.STL_SKIP_AUTO_CLEANUP
を設定します。
import {render, cleanup} from '@testing-library/svelte'
// Default: runs after each test
afterEach(() => {
cleanup()
})
render(YourComponent)
// Called manually for more control
cleanup()
act
Svelteからの保留中の更新がすべてDOMに適用されていることを確認します。オプションで、更新が適用される前に呼び出す関数を渡すことができます。関数がPromise
を返す場合、最初に解決されます。
Svelteのtick
メソッドを使用して更新を適用します。
import {act, render} from '@testing-library/svelte'
const {component} = render(MyComponent)
await act(() => {
component.updateSomething()
})
fireEvent
(非同期)
イベントを発生させ、SvelteがDOMを更新するのを待ちます。DOM Testing LibraryのfireEvent
の非同期ラッパー。
可能な場合は、fireEvent
の代わりに@testing-library/user-event
を使用することをお勧めします。
import {fireEvent, render, screen} from '@testing-library/svelte'
render(MyComponent)
const button = screen.getByRole('button')
await fireEvent.click(button)