このカリキュラムでは、JavaScriptのテストについて体系的に学びます。ソフトウェアの品質を向上させるために、ユニットテストやエンドツーエンド(E2E)テストの役割を理解し、実際にJestやCypressを使ってテストを実装するスキルを身につけます。
1.テストの重要性と概要
1-1. なぜテストが必要なのか?
ソフトウェア開発において、テストは以下のような役割を果たします。
- バグの早期発見と修正:
コードをテストすることで、開発段階でバグを発見しやすくなる。 - リファクタリングの安全性向上:
既存の機能を修正する際、テストがあることで動作保証ができる。 - 開発スピードの向上:
手動テストの負担を減らし、開発をスムーズに進められる。
1-2. テストの種類と特徴
テストにはさまざまな種類がありますが、本カリキュラムでは特に以下の2つに焦点を当てます。
- ユニットテスト(Unit Test)
- 個々の関数やモジュール単位で動作を検証する。
- 実行速度が速く、バグを局所的に特定できる。
- Jestを使用して実装する。
- 個々の関数やモジュール単位で動作を検証する。
- エンドツーエンドテスト(E2E Test)
- 実際のユーザー操作を模倣し、アプリ全体の動作を検証する。
- UIの変化やAPIの連携も含めた総合的なテストが可能。
- Cypressを使用して実装する。
- 実際のユーザー操作を模倣し、アプリ全体の動作を検証する。
2.ユニットテスト(Jest)
2-1. Jestの概要と導入
Jestは、JavaScriptのユニットテストフレームワークの一つで、シンプルな設定と高速な実行が特徴です。
Jestのインストール
npm install --save-dev jest
package.jsonの設定
{
"scripts": {
"test": "jest"
}
}
基本的なテストの書き方
Jestを使ったシンプルなテスト例を見てみましょう。
// sum.js
function sum(a, b) {
return a + b;
}
module.exports = sum;
sum.test.js
const sum = require('./sum');
test('1 + 2 は 3', () => {
expect(sum(1, 2)).toBe(3);
});
上記のテストを実行するには、以下のコマンドを実行します。
npm test
2-2. モックとスタブの活用
Jestでは、外部依存を排除してテストしやすくするために「モック」や「スタブ」を使用できます。
モックの例(関数を模倣する)
const fetchData = jest.fn(() => Promise.resolve('データ取得成功'));
test('fetchData は "データ取得成功" を返す', async () => {
await expect(fetchData()).resolves.toBe('データ取得成功');
});
スタブの例(外部モジュールを置き換える)
jest.mock('./api');
const api = require('./api');
test('APIのレスポンスをモックする', async () => {
api.getData.mockResolvedValue('モックデータ');
await expect(api.getData()).resolves.toBe('モックデータ');
});
3.エンドツーエンドテスト(Cypress)
3-1. Cypressの概要とセットアップ
Cypressは、ブラウザ上で実際のユーザー操作を模倣し、アプリケーションの動作を検証するためのツールです。
Cypressのインストール
npm install --save-dev cypress
Cypressの初期設定
npx cypress open
上記のコマンドを実行すると、Cypressの管理画面が開きます。
ここからテストを実行できます。
3-2. ユーザー操作を模倣したテスト
Cypressを使って、ログイン機能をテストする例を見てみましょう。
テスト対象のアプリケーション(login.html)
<form id="login-form">
<input type="text" id="username" />
<input type="password" id="password" />
<button type="submit">ログイン</button>
</form>
<p id="message"></p>
Cypressのテストコード
describe('ログイン機能のテスト', () => {
it('正しい情報でログインできる', () => {
cy.visit('/login.html');
cy.get('#username').type('testuser');
cy.get('#password').type('password123');
cy.get('#login-form').submit();
cy.get('#message').should('contain', 'ログイン成功');
});
});
まとめ
本カリキュラムでは、JavaScriptのテストについて学びました。
✅ ユニットテスト(Jest):
小さな単位で関数の動作を検証する。
✅ モック・スタブ:
外部依存を排除して、テストしやすくする。
✅ エンドツーエンドテスト(Cypress):
実際のユーザー操作を模倣して、アプリの動作を検証する。
テストを活用することで、開発の品質と効率を向上させることができます。
今後のプロジェクトで積極的に取り入れていきましょう!