ホームページ >ウェブフロントエンド >jsチュートリアル >Bun Test を使用したテスト駆動開発 (TDD)
テスト駆動開発 (TDD) は、クリーンでバグのないコードを作成するための強力な方法論です。この記事では、速度とシンプルさで知られる Bun の組み込みテスト ランナー Bun Test を使用して TDD を実装する方法を検討します。
テスト駆動開発 (TDD) は、コードの前にテストを記述するソフトウェア開発手法です。 TDD プラクティスは実装をガイドし、反復的な作成、テスト、リファクタリング サイクルを通じて機能を保証します。
TDD は、次の手順に従う開発プロセスです。
この反復プロセスは、堅牢で十分にテストされたコードを生成するように設計されています。
Bun をインストールしていない場合は、Bun JavaScript ドキュメントの手順に従ってインストールしてください。
次に、新しいプロジェクトを初期化します:
bun init
➜ example bun init bun init helps you get started with a minimal project and tries to guess sensible defaults. Press ^C anytime to quit package name (example): entry point (index.ts): Done! A package.json file was saved in the current directory.
tests ディレクトリにテスト ファイルを作成します (例: testing/example.test.js)。 Bun は、テスト用に .test.ts または .test.js で終わるファイルを自動的に検出します。
mkdir tests touch tests/example.test.js
簡単な例から始めましょう。
いくつかの数学関数を実装するための電卓ファイルを作成します。
JavaScript にはすでにネイティブの加算演算子がありますが、最初は sum() のような単純な関数に焦点を当てます。これにより、ロジックの複雑さではなく、テストの構造化に集中できるようになります。
計画は次のとおりです:
tests/calculator.test.js ファイルで、テストを実装できます。
import { describe, expect, it } from "bun:test"; import { sum } from "../calculator"; describe("sum function", () => { it("should return the sum of two numbers (both are positive)", () => { expect(sum(2, 3)).toBe(5); }); it("should return the sum of two numbers (one is negative)", () => { expect(sum(-1, 2)).toBe(1); }); });
これらのテストは、電卓モジュールで定義された sum() 関数の動作を検証します。テストは Bun のテスト ライブラリを使用して記述され、「sum 関数」という名前の記述ブロック内に編成されます。 description() ブロックは、「類似した」テストをグループ化するのに役立ちます。各 it() ブロックは、テストする特定のシナリオを指定します。各テストの内容は次のとおりです:
これらのテストは、正の数と混合 (正と負) 入力の両方をカバーし、基本的な加算シナリオで sum 関数が期待どおりに動作することを確認します。
これで、sum() 関数をエクスポートする計算機モジュールを作成できます。
calculator.ts ファイル内:
bun init
関数の最初のバージョンはハードコードされた値を返すため、テストは失敗すると予想されます。
テストの実行:
➜ example bun init bun init helps you get started with a minimal project and tries to guess sensible defaults. Press ^C anytime to quit package name (example): entry point (index.ts): Done! A package.json file was saved in the current directory.
これで、電卓で sum() 関数のロジックを調整できます。ts sum() 関数のロジックを調整します。
mkdir tests touch tests/example.test.js
ここでテストを実行すると、ステータスが「緑色」✅ になります。
異なるシナリオ (入力値) で同じテストを実行したい場合は、 each() メソッドを使用できます。
import { describe, expect, it } from "bun:test"; import { sum } from "../calculator"; describe("sum function", () => { it("should return the sum of two numbers (both are positive)", () => { expect(sum(2, 3)).toBe(5); }); it("should return the sum of two numbers (one is negative)", () => { expect(sum(-1, 2)).toBe(1); }); });
このコードは、データセット駆動のアプローチを使用して、計算モジュールからの sum 関数をテストします。 it.each() メソッドは、入力と予想される出力のデータセットを反復処理することにより、反復的なテスト ケースを簡素化するために使用されます。仕組みの詳細は次のとおりです:
まず、データセットを定義できます
export function sum(a: number, b: number) { // Function yet to be implemented return 0; }
データセットは配列の配列です。それぞれの内部配列はテスト ケースを表し、要素は以下に対応します。
describe 関数は、整理しやすくするために、sum 関数に関連するすべてのテストを 1 つのブロックにグループ化します。
describe() ブロックでは、it.each(dataset) がデータセット配列の各行を反復処理します。
「%d と %d の合計は %d である必要があります」はテストの説明テンプレートであり、%d は各反復中にデータセットの実際の数値に置き換えられます。
たとえば、最初の反復では、「2 と 3 の合計は 5 になるはずです」という説明が生成されます。
コールバック関数 (a、b、expected) では、データセット内の各行の要素が変数 a、b、expected に分解されます。次に、テスト内で a と b を使用して sum 関数が呼び出され、expect() を使用して結果がチェックされ、期待されたものと一致するかどうかが確認されます。
TDD の追加の例を示すために、数値配列の平均 (平均) を計算する計算モジュールに平均関数を実装してみましょう。 TDD アプローチに従って、テストを書くことから始めます。
既存の calculator.test.js に、mean() 関数に固有の次のテストを追加します。
bun init
calculator.ts ファイルに、mean() 関数を追加します。
➜ example bun init bun init helps you get started with a minimal project and tries to guess sensible defaults. Press ^C anytime to quit package name (example): entry point (index.ts): Done! A package.json file was saved in the current directory.
これで、テストを再度実行できるようになりました
mkdir tests touch tests/example.test.js
すべてのテストに合格するはずです。
この場合、実装はすでにテストされているため、それ以上のリファクタリングは必要ありません。ただし、常に時間をかけてコードをレビューして改善してください。
テスト カバレッジは、自動テスト中に実行されるコードベースの割合を測定する指標です。これにより、テストがコードをどの程度検証するかについての洞察が得られます。
Bun テストのカバレッジは、「ライン カバレッジ」を特定するのに役立ちます。
行カバレッジは、コードの各行がテスト スイート中に実行されるかどうかをチェックします。
テスト カバレッジの実行:
import { describe, expect, it } from "bun:test"; import { sum } from "../calculator"; describe("sum function", () => { it("should return the sum of two numbers (both are positive)", () => { expect(sum(2, 3)).toBe(5); }); it("should return the sum of two numbers (one is negative)", () => { expect(sum(-1, 2)).toBe(1); }); });
高いテストカバレッジは重要ですが、コード品質の唯一の尺度ではありません。機能、エッジケース、アプリケーションの重要な部分に焦点を当てた有意義なテストを目指します。 100% のカバレッジを達成するのが理想的ですが、不必要なテストや些細なテストを作成することを犠牲にしてはいけません。
Bun Test を使用したテスト駆動開発 (TDD) は、開発者が最初に要件に焦点を当て、反復テストを通じて機能を確保することにより、クリーンで保守可能で堅牢なコードを作成できるようにします。 Bun の高速かつ効率的なテスト ツールを活用することで、開発プロセスを合理化し、エッジ ケースに自信を持って対処できます。 TDD を採用すると、コードの品質が向上するだけでなく、最初からテスト可能なモジュール化されたコードを作成するという考え方も促進されます。小規模から始めて頻繁に反復し、テストに基づいて実装を進めてください。
以上がBun Test を使用したテスト駆動開発 (TDD)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。