TypeScriptのセットアップ
TypeScriptを使用してテストを書くことで、自動補完と型安全性を得ることができます。
tsx
をdevDependencies
にインストールする必要があります:
- npm
- Yarn
- pnpm
$ npm install tsx --save-dev
$ yarn add tsx --dev
$ pnpm add tsx --save-dev
WebdriverIOは、これらの依存関係がインストールされているかを自動的に検出し、設定とテストをコンパイルします。WDIOの設定と同じディレクトリにtsconfig.json
を配置してください。
カスタムTSConfig
tsconfig.json
に別のパスを設定する必要がある場合は、TSCONFIG_PATH環境変数に希望のパスを設定するか、wdio設定のtsConfigPath設定を使用してください。
あるいは、tsx
の環境変数を使用することもできます。
型チェック
tsx
は型チェックをサポートしていないことに注意してください - 型をチェックしたい場合は、tsc
を使用して別のステップでこれを行う必要があります。
フレームワークのセットアップ
tsconfig.json
には以下が必要です:
{
"compilerOptions": {
"types": ["node", "@wdio/globals/types"]
}
}
webdriverio
や@wdio/sync
を明示的にインポートすることは避けてください。
WebdriverIO
とWebDriver
の型は、tsconfig.json
のtypes
に追加すれば、どこからでもアクセスできます。追加のWebdriverIOサービス、プラグイン、またはdevtools
自動化パッケージを使用する場合は、それらもtypes
リストに追加してください。多くの場合、追加の型定義が提供されます。
フレームワークの型
使用するフレームワークに応じて、そのフレームワークの型をtsconfig.json
のtypes
プロパティに追加し、その型定義をインストールする必要があります。これは、組み込みのアサーションライブラリexpect-webdriverio
の型サポートを持ちたい場合に特に重要です。
例えば、Mochaフレームワークを使用する場合、@types/mocha
をインストールし、以下のように追加して、すべての型をグローバルに利用できるようにする必要があります:
- Mocha
- Jasmine
- Cucumber
{
"compilerOptions": {
"types": ["node", "@wdio/globals/types", "@wdio/mocha-framework"]
}
}
{
"compilerOptions": {
"types": ["node", "@wdio/globals/types", "@wdio/jasmine-framework"]
}
}
{
"compilerOptions": {
"types": ["node", "@wdio/globals/types", "@wdio/cucumber-framework"]
}
}
サービス
ブラウザスコープにコマンドを追加するサービスを使用する場合は、それらもtsconfig.json
に含める必要があります。例えば、@wdio/lighthouse-service
を使用する場合は、それもtypes
に追加してください:
{
"compilerOptions": {
"types": [
"node",
"@wdio/globals/types",
"@wdio/mocha-framework",
"@wdio/lighthouse-service"
]
}
}
サービスとレポーターをTypeScript設定に追加することで、WebdriverIO設定ファイルの型安全性も強化されます。
型定義
WebdriverIOコマンドを実行する際、通常はすべてのプロパティが型付けされているため、追加の型をインポートする必要はありません。ただし、変数を事前に定義したい場合があります。これらが型安全であることを確認するために、@wdio/types
パッケージで定義されているすべての型を使用できます。例えば、webdriverio
のリモートオプションを定義したい場合は、次のようにします:
import type { Options } from '@wdio/types'
// 型を直接インポートしたい例
const remoteConfig: Options.WebdriverIO = {
hostname: 'http://localhost',
port: '4444' // エラー: Type 'string' is not assignable to type 'number'.ts(2322)
capabilities: {
browserName: 'chrome'
}
}
// その他の場合、`WebdriverIO`名前空間を使用できます
export const config: WebdriverIO.Config = {
...remoteConfig
// その他の設定オプション
}
ヒントとコツ
コンパイルとリント
完全に安全を期すためには、ベストプラクティスに従うことを検討してください:TypeScriptコンパイラ(tsc
またはnpx tsc
を実行)でコードをコンパイルし、eslintをプリコミットフックで実行します。