こんにちは、みんな! この記事を書くきっかけとなったのは、私の生徒や指導者たちでした。私はよく、 でのテスト自動化プロセスに慣れたらすぐに を学ぶことをお勧めします。 REST API テストの観点から、テスト自動化フレームワークで TypeScript を使用する場合の特徴を見てみましょう。 JavaScript TypeScript テスト プロジェクトの完全なコードは あります。 ここに TypeScript とは何か、 とどのように違うのかについてはあまり深入りせずに、重要なことを述べましょう。 。ただし、これも非常に重要です。これは ( プラットフォーム) に直接依存します。 TypeScript JavaScript それは 言語です プログラミング JavaScript Node.js は パッケージとして提供されるため、私はこれをいくつかの優れた機能を備えた と見なします。 TypeScript Node.js JavaScript この言語自体とその機能について詳しく知りたい場合は、 にアクセスしてください。テスト自動化の観点からその機能について説明します。 公式 Web サイト プロジェクトのセットアップ でのテスト自動化プロジェクトの作成プロセスを見てみましょう。 TypeScript プロジェクトを作成します。 Node.js npm init -y パッケージをインストールします。 TypeScript npm i typescript プロジェクトのデフォルトの 構成 を生成します。 TypeScript tsconfig.json npx tsc --init 上記のコマンドはデフォルトの設定ファイルを生成しますが、 に大幅に短縮することをお勧めします。 次のよう { "compilerOptions": { "baseUrl": "./", "module": "esnext", "target": "esnext", "sourceMap": false, "moduleResolution": "node", "allowJs": true, "skipLibCheck": true, "resolveJsonModule": true, "allowSyntheticDefaultImports": true, "paths": { "*": ["./*"] } } } この構成には、必要な最小限のものが含まれています。 最新の バージョンを使用します。 EcmaScript JSON インポートを利用可能にします。 インポートで絶対パスを使用できるようになります。 を使用して構成を拡張できます。 公式ドキュメント ツールの選択 エコシステムが提供するあらゆるツールを使用できますが、私の経験では、 のほとんどは、次のような正当な理由から を選択します。 Node.js TypeScript を扱うエンジニア Jest 優れたコミュニティサポート (アップデート、回答、ドキュメント、コードサンプル)、 柔軟な構成。 以前は、 + 使用してプロジェクトのコアをセットアップするのが楽しかったのですが、現在はテスト ランナーとアサーション ライブラリの両方が含まれている を使い続けています。 Mocha Chai を Jest 最も人気のある HTTP クライアントのようですので、これも選択することをお勧めします。 Axios は セットアップでこれを使用することが強制されているとは言えませんが、プロジェクトに目を通すとそれが通常のことであると言っています。 ここで、これらのパッケージを依存関係としてインストールするだけです。 npm i jest axios 型コレクション 一部のパッケージ ( など) には 型が含まれていますが、 には含まれていません。また、 正しく動作するには、 とともに パッケージが必要です。最初のパッケージでは 機能が有効になり、2 番目のパッケージでは が使用できるようになります。 Axios TypeScript Jest と Mocha Jest が @types/jest ts-jest TypeScript IntelliSense したがって、一部のパッケージを使用しようとするときにオートコンプリート機能がない場合は、型宣言が欠落している可能性があることに注意してください。 関連の拡張機能 (パッケージ) もインストールしましょう。 TypeScript npm i ts-jest @types/jest 構成 構成プリセットが必要なので、それを構成 (または ) ファイルで宣言する必要があります。 Jest には ts-jest package.json { "jest": { "preset": "ts-jest" } } 予定がある場合は、構成も調整する必要があります。 プロジェクト内で絶対パスを使用する { "jest": { "preset": "ts-jest", "moduleDirectories": [ "node_modules", "<rootDir>" ] } } この構成を使用すると、単純なコマンド... でテストを実行できます。 jest したがって、 で スクリプトを次のように構成します。 package.json テスト { "scripts": { "test": "jest" } } そして、 または コマンドを使用していつでもテストを実行できます。 npm test npm run test また ユーザーの場合は をインストールすることをお勧めします。これにより、ワンクリックで必要なテスト/スイートを / ようになります。 これは組み込み機能です。 、Visual Studio Code 、Jest Runner 拡張機能 実行 デバッグできる WebStorm では、 カスタムタイプ が REST API テストに導入する主な機能は次のとおりです。 、 もちろん! TypeScript 種類 リクエストとレスポンスの本文がどのようになるかを宣言できます。つまり、 、 や。。など。 キー名 値の型 サーバーを例に挙げてみましょう。/auth エンドポイントの 本文ペイロードをタイプとして書き留めることができます。 Paysis /auth export type AuthRequestBody = { login: string password: string } 応答本文についても同様です。どのサーバーがリクエストに送信する必要がありますか? export type AuthResponseBody = { token?: string message?: string } 成功/失敗のシナリオではペイロードが異なるため、「 を使用してキーを「オプション」としてマークできます。キャラクター。 ?」 それが完了したら、これらのタイプを使用してテストでリクエストと検証を作成できます... リクエスト では、リクエスト構成を介して送信する本文を指定できます。 Axios const payload: AxiosRequestConfig<AuthRequestBody> = { method: 'post', url: '/auth', data: { login: process.env.USERNAME, password: process.env.PASSWORD, }, } の 、まさにそれを意味します ☝️ AxiosRequestConfig<AuthRequestBody> AuthRequestBody これは、 オブジェクトで指定されたタイプ に一致するペイロードを使用することが強制されることを意味します。必須フィールドの設定を忘れたり、過剰なフィールドを設定したりすると、エラーが表示されます。 data AuthRequestBody 応答 応答についても同じことができます。 const response: AxiosResponse<AuthResponseBody> = await client.request(payload) これにより、 オブジェクトにオートコンプリートが追加されるため、 フィールドまたは フィールドにアクセスできるようになります。 response.data response.data.token response.data.message 高度なツール 上記の単純なものとは別に、 こともできます。これにより、応答本文内のすべてのキーをチェックしてスキーマと一致するかどうかを確認するのではなく、 。 カスタム タイプから JSON スキーマを生成する ペイロード全体をチェックできます したがって、アイデアは次のとおりです。 カスタムタイプから を生成します。 JSON スキーマ カスタム マッチャー 使用して、応答本文を検証します。 toMatchSchema を 非常に素晴らしいことですが、これらの変更後はテストが不安定になる可能性があることに注意してください。これは追加のフィールドが表示されるときに発生するため、スキーマを定期的に更新する必要があります。 結論 セットアップは、特に初めての場合は難しいかもしれませんが、それだけの価値はあります。 TypeScript の 入力データと出力データを型でカバーすれば、これらのオブジェクトを解析するときにタイプミスやその他の構文エラーが発生する可能性はありません。これにより、単純な間違いを防ぐことができ、コード内でリクエストの構造を直接確認できるため、 ( など) を開いて、リクエスト/応答する本文を確認するために必要なリクエストを探す必要がなくなります。と。 HTTP コレクション Postman あなたの経験とそれについてどう思うか教えてください。