Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

AWS CodeBuild を使用して GitHub から Node.js アプリケーションのユニットテストを実行する - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS CodeBuild を使用して GitHub から Node.js アプリケーションのユニットテストを実行する

作成者: Thomas Scott (AWS)、Jean-Baptiste Guillois (AWS)

概要

このパターンは、Node.js ゲーム API のサンプルソースコードと主要ユニットテストコンポーネントを提供します。また、継続的インテグレーションおよび継続的デリバリー (CI/CD) ワークフローの一環として、AWS CodeBuild を使用した、GitHub リポジトリーからのこれらのユニットテストの実行方法も含まれます。

ユニットテストは、ユニットと呼ばれるアプリケーションのさまざまな部分が個別に独立してテストされ、正しく動作するかどうかがテストされるソフトウェア開発プロセスです。テストはコードの品質を検証し、期待どおりに機能することを確認します。テストを参考にすれば、他の開発者も簡単にコードベースに慣れることができます。ユニットテストは、将来のリファクタリング時間を短縮し、エンジニアがコードベースに素早く慣れるようにする上で役立ち、期待される動作に自信を与えます。

ユニットテストでは、AWS Lambda 関数など、個々の関数をテストします。ユニットテストを作成するには、テストフレームワークとテスト (アサーション) を検証する方法が必要です。このパターンのコード例では、Mocha テストフレームワークと Chai アサーションライブラリを使用します。 

ユニットテストとテストコンポーネントの例の詳細については、「追加情報」セクションを参照してください。

前提条件と制限

  • 正しい CodeBuild 権限があるアクティブな AWS アカウント

  • GitHub アカウント (「サインアップの手順」を参照)

  • Git (「インストール手順」を参照)

  • 変更を行い、コードを GitHub にプッシュするためのコードエディタ

アーキテクチャ

このパターンは、次の図に示すアーキテクチャを実装します。

CodeBuild と GitHub リポジトリでユニットテストを実行する AWS クラウドアーキテクチャ

ツール

ツール

  • Git は、コード開発に使用できるバージョン管理システムです。

  • AWS CodeBuild は、ソースコードをコンパイルし、テストを実行し、すぐにデプロイできるソフトウェアパッケージを生成するフルマネージドの継続的統合サービスです。CodeBuild を使用すると、ビルドサーバーのプロビジョニング、管理、スケーリングが不要になります。CodeBuild では、継続的にスケーリングされ、複数のビルドが同時にプロセスされるため、ビルドの実行までキューで待機することはありません。パッケージ済みのビルド環境を使用、またはご自分のビルドツールを使用するカスタムビルド環境を作成できることですぐに開始できます。CodeBuild では毎分ごとに使用するコンピューティングリソースの使用量が有料になります。

コード

このパターンのソースコードは、GitHub のサンプルゲームユニットテストアプリケーションリポジトリにあります。このサンプルから独自の GitHub リポジトリを作成 (オプション 1)、またはこのパターンのサンプルリポジトリを直接使用 (オプション 2) できます。次のセクションの各オプションの指示に従います。従うオプションは、ユースケースによって異なります。

エピック

タスク説明必要なスキル

サンプルプロジェクトに基づいて独自の GitHub リポジトリを作成します。

  1. GitHub にログインします。

  2. 新しいレポジトリを作成します。手順については、GitHub のドキュメントを参照してください。

  3. サンプルリポジトリをクローンして、アカウントの新しいリポジトリにプッシュします。

アプリ開発者、AWS 管理者、AWS DevOps

新しい CodeBuild プロジェクトを作成します。

  1. AWS マネジメントコンソールにサインインし、https://console.aws.amazon.com/codesuite/codebuild/home で CodeBuild コンソールを開きます。

  2. Create build project (ビルドプロジェクトの作成)を選択します。

  3. プロジェクト設定セクションのプロジェクト名で、aws-tests-sample-node-js と入力します。

  4. ソースセクションの ソースプロバイダで、 [GitHub] を選択します。

  5. リポジトリでは、[Repository in my GitHub account(自分の GitHub アカウントのリポジトリ)] を選択し、URL を新しく作成した GitHub リポジトリに貼り付けます。

  6. プライマリソースの Webbook イベントセクションで、[Rebuild every time a code change is pushed to this repository(コードの変更がこのリポジトリにプッシュされるたびに再構築する)をオンにします。

  7. イベントタイプで、[PUSH(プッシュ)] を選択します。 

  8. 環境セクションで、マネージドイメージ、Amazon Linux、および最新のイメージを選択します。

  9. 他のすべてのオプションはデフォルト設定のままにしてから、[Create build project (ビルドプロジェクトの作成)] を選択します。

アプリ開発者、AWS 管理者、AWS DevOps

ビルドを開始します。

確認 ページで、[Start build(ビルドの開始)] を選択してビルドを実行します。

アプリ開発者、AWS 管理者、AWS DevOps

オプション 1 - CodeBuild を使用して個人用 GitHub リポジトリでユニットテストを実行

タスク説明必要なスキル

サンプルプロジェクトに基づいて独自の GitHub リポジトリを作成します。

  1. GitHub にログインします。

  2. 新しいレポジトリを作成します。手順については、GitHub のドキュメントを参照してください。

  3. サンプルリポジトリをクローンして、アカウントの新しいリポジトリにプッシュします。

アプリ開発者、AWS 管理者、AWS DevOps

新しい CodeBuild プロジェクトを作成します。

  1. AWS マネジメントコンソールにサインインし、https://console.aws.amazon.com/codesuite/codebuild/home で CodeBuild コンソールを開きます。

  2. Create build project (ビルドプロジェクトの作成)を選択します。

  3. プロジェクト設定セクションのプロジェクト名で、aws-tests-sample-node-js と入力します。

  4. ソースセクションの ソースプロバイダで、 [GitHub] を選択します。

  5. リポジトリでは、[Repository in my GitHub account(自分の GitHub アカウントのリポジトリ)] を選択し、URL を新しく作成した GitHub リポジトリに貼り付けます。

  6. プライマリソースの Webbook イベントセクションで、[Rebuild every time a code change is pushed to this repository(コードの変更がこのリポジトリにプッシュされるたびに再構築する)をオンにします。

  7. イベントタイプで、[PUSH(プッシュ)] を選択します。 

  8. 環境セクションで、マネージドイメージ、Amazon Linux、および最新のイメージを選択します。

  9. 他のすべてのオプションはデフォルト設定のままにしてから、[Create build project (ビルドプロジェクトの作成)] を選択します。

アプリ開発者、AWS 管理者、AWS DevOps

ビルドを開始します。

確認 ページで、[Start build(ビルドの開始)] を選択してビルドを実行します。

アプリ開発者、AWS 管理者、AWS DevOps
タスク説明必要なスキル

新しい CodeBuild ビルドプロジェクトを作成します。

  1. AWS マネジメントコンソールにサインインし、https://console.aws.amazon.com/codesuite/codebuild/home で CodeBuild コンソールを開きます。

  2. Create build project (ビルドプロジェクトの作成)を選択します。

  3. プロジェクト設定セクションのプロジェクト名で、aws-tests-sample-node-js と入力します。

  4. ソースセクションの ソースプロバイダで、 [GitHub] を選択します。

  5. リポジトリには [Public repository(パブリックリポジトリ)] を選択してから、URL: https://github.com/aws-samples/node-js-tests-sample を貼り付けます。

  6. 環境セクションで、マネージドイメージ、Amazon Linux、および最新のイメージを選択します。

  7. 他のすべてのオプションはデフォルト設定のままにしてから、[Create build project (ビルドプロジェクトの作成)] を選択します。

アプリ開発者、AWS 管理者、AWS DevOps

ビルドを開始します。

確認 ページで、[Start build(ビルドの開始)] を選択してビルドを実行します。

アプリ開発者、AWS 管理者、AWS DevOps

オプション 2 - CodeBuild を使用してパブリック GitHub リポジトリでユニットテストを実行

タスク説明必要なスキル

新しい CodeBuild ビルドプロジェクトを作成します。

  1. AWS マネジメントコンソールにサインインし、https://console.aws.amazon.com/codesuite/codebuild/home で CodeBuild コンソールを開きます。

  2. Create build project (ビルドプロジェクトの作成)を選択します。

  3. プロジェクト設定セクションのプロジェクト名で、aws-tests-sample-node-js と入力します。

  4. ソースセクションの ソースプロバイダで、 [GitHub] を選択します。

  5. リポジトリには [Public repository(パブリックリポジトリ)] を選択してから、URL: https://github.com/aws-samples/node-js-tests-sample を貼り付けます。

  6. 環境セクションで、マネージドイメージ、Amazon Linux、および最新のイメージを選択します。

  7. 他のすべてのオプションはデフォルト設定のままにしてから、[Create build project (ビルドプロジェクトの作成)] を選択します。

アプリ開発者、AWS 管理者、AWS DevOps

ビルドを開始します。

確認 ページで、[Start build(ビルドの開始)] を選択してビルドを実行します。

アプリ開発者、AWS 管理者、AWS DevOps
タスク説明必要なスキル

テスト結果を表示します。

CodeBuild コンソールで、CodeBuild ジョブのユニットテスト結果を確認します。結果は追加情報セクションに表示されている結果と一致するはずです。

これらの結果は、GitHub リポジトリと CodeBuild の統合を検証します。 

アプリ開発者、AWS 管理者、AWS DevOps

Webbook を適用します。

これで Webhook を適用できるようになったため、コードの変更をリポジトリのメインブランチにプッシュするたびに自動的にビルドを開始できます。手順については、CodeBuild ドキュメントを参照してください。

アプリ開発者、AWS 管理者、AWS DevOps

ユニットテストの分析

タスク説明必要なスキル

テスト結果を表示します。

CodeBuild コンソールで、CodeBuild ジョブのユニットテスト結果を確認します。結果は追加情報セクションに表示されている結果と一致するはずです。

これらの結果は、GitHub リポジトリと CodeBuild の統合を検証します。 

アプリ開発者、AWS 管理者、AWS DevOps

Webbook を適用します。

これで Webhook を適用できるようになったため、コードの変更をリポジトリのメインブランチにプッシュするたびに自動的にビルドを開始できます。手順については、CodeBuild ドキュメントを参照してください。

アプリ開発者、AWS 管理者、AWS DevOps

関連リソース

追加情報

ユニットテスト結果

プロジェクトが正常にビルドされると、CodeBuild コンソールに次のテスト結果が表示されるはずです。 

ユニットテストから期待される結果

ユニットテストコンポーネントの例

このセクションでは、ユニットテストで使用される 4 種類のテストコンポーネント (アサーション、スパイ、スタブ、モック) について説明します。各コンポーネントの簡単な説明とコード例が含まれています。 

アサーション

アサーションは期待される結果の検証に使用されます。これは特定の関数からの期待される応答を検証するため、重要なテストコンポーネントです。次のサンプルアサーションは、新しいゲームを初期化するときに、返される ID が 0 から 1000 の間であることを検証します。

const { expect } = require('chai'); const { Game } = require('../src/index'); describe('Game Function Group', () => { it('Check that the Game ID is between 0 and 1000', function() { const game = new Game(); expect(game.id).is.above(0).but.below(1000) }); });

スパイ

スパイは関数を実行中に何が起きているかの観察に使用されます。たとえば、関数が正しく呼び出されたことを確認する必要があります。次の例は、Game クラスオブジェクトで開始メソッドと停止メソッドが呼び出されることを示しています。

const { expect } = require('chai'); const { spy } = require('sinon'); const { Game } = require('../src/index'); describe('Game Function Group', () => { it('should verify that the correct function is called', () => { const spyStart = spy(Game.prototype, "start"); const spyStop = spy(Game.prototype, "stop"); const game = new Game(); game.start(); game.stop(); expect(spyStart.called).to.be.true expect(spyStop.called).to.be.true }); });

スタブ

スタブは関数のデフォルトレスポンスのオーバーライドに使用されます。これは関数が外部リクエストをする場合に特に便利です。ユニットテストから外部リクエストをしないようにするためです。(外部リクエストは、異なるコンポーネント間のリクエストを物理的にテストできる統合テストにより適しています)。次の例では、スタブが getId 関数からのリターン ID を強制します。

const { expect } = require('chai'); const {.stub } = require('sinon'); const { Game } = require('../src/index'); describe('Game Function Group', () => { it('Check that the Game ID is between 0 and 1000', function() { let generateIdStub = stub(Game.prototype, 'getId').returns(999999); const game = new Game(); expect(game.getId).is.equal(999999); generateIdStub.restore(); }); });

モック

モックは、さまざまなシナリオをテストする動作があらかじめプログラムされたフェイクメソッドです。モックはスタブの拡張版と見なすことができ、複数のタスクを同時に実行できます。以下の例では、モックを使用して 3 つのシナリオを検証します。

  • 関数の呼び出し 

  • 引数による関数の呼び出し

  • 関数は整数 9 を返す

const { expect } = require('chai'); const {.mock } = require('sinon'); const { Game } = require('../src/index'); describe('Game Function Group', () => { it('Check that the Game ID is between 0 and 1000', function() { let mock = mock(Game.prototype).expects('getId').withArgs().returns(9); const game = new Game(); const id = get.getId(); mock.verify(); expect(id).is.equal(9); }); });
プライバシーサイト規約Cookie の設定
© 2025, Amazon Web Services, Inc. or its affiliates.All rights reserved.