環境
MacBook Pro (2.3 GHz 8コアIntel Core i9)
macOS 14.0(23A344)
Homebrew 4.3.8
gh 2.52.0
目次
jest.spyOn(object, methodName)
の基本構文
jest.fnと同様の関数を作成しますが、引数に与えられたobject[methodName]へのコールも実装します。 Jestの モック関数を返します。
xx.test.ts
const spy = jest.spyOn(object, methodName);
mockFn.mockResolvedValueOnce(value)
の基本構文
モック関数を1回呼び出したときに返す値を受け取ります。 次のモック関数へのコールが異なる値を返せるようチェーンすることができます。
xx.test.ts
const spy = jest.spyOn(object, methodName);
spy.mockResolvedValueOnce(value);
活用例1
テスト対象の関数
APIからデータを取得する関数fetchUserData
があり、それをテストするとします。この関数は、getUser
という外部の関数を使ってデータを取得します。
userService.ts
// テスト対象の関数
export const getUser = async (id: number) => {
// 実際にはAPIからユーザー情報を取得する処理がある(実際のコードではなく、構造や流れを示すためのサンプル関数)
return { id, name: "John Doe" };
};
export const fetchUserData = async (id: number) => {
const user = await getUser(id);
return user.name;
};
テストデータ
userService.fixture.ts
// テストデータ
const mockUserData = { id: 1, name: "Alice" };
単体テストコード
userService.test.ts
import { fetchUserData, getUser } from './userService';
import { mockUserData } from './userService.fixture';
test('fetchUserData should return user name', async () => {
// Arrange
// getUser関数をスパイして、モックデータを返すように設定
const getUserSpy = jest.spyOn(require('./userService'), 'getUser')
getUserSpy.mockResolvedValueOnce(mockUserData);
// Act
// fetchUserDataを実行
const userName = await fetchUserData(1);
// Assert
// getUserが正しく呼び出されているかを確認
expect(getUserSpy).toHaveBeenCalledWith(1);
// fetchUserDataが返す値がモックデータの名前であることを確認
expect(userName).toBe("Alice");
});
活用例1のアルゴリズムイメージ
参考リンク
メイン
AAA
- 単体テストメソッドのArrangeセクションでは、オブジェクトを初期化し、テスト対象のメソッドに渡されるデータの値を設定します。
- Actセクションでは、設定されたパラメーターでテスト対象のメソッドを呼び出します。
- Assertセクションでは、テスト対象のメソッドの操作が予測どおりに動作することを検証します。.NETでは、多くの場合、Assertクラスのメソッドが検証に使用されます。