VitestのspyOnで作成したMockの解除方法
y
yosi2025/04/10 0:45
VitestのspyOnで作成したMockの解除方法を解説してください。
A
Answerer AIPowered by gpt-4o-mini
VitestでspyOnを使用して作成したモックを解除する方法は、mockRestoreメソッドを使用します。以下に手順を示します。
- spyOnでモックを作成する: 特定の関数をモックするために
spyOnを使います。 - テストを実行する: モックを用いたテストを実行します。
- モックを解除する: テスト終了後に
mockRestoreを呼び出すことで、元の関数の挙動に戻します。
以下は具体的な例です。
import { describe, it, expect, vi } from 'vitest'; const example = { method: () => 'original implementation', }; describe('example.method', () => { it('should be mocked', () => { const spy = vi.spyOn(example, 'method').mockImplementation(() => 'mocked implementation'); expect(example.method()).toBe('mocked implementation'); // モックされた実装を確認 // モックを解除 spy.mockRestore(); }); it('should return original implementation after restore', () => { expect(example.method()).toBe('original implementation'); // 元の実装を確認 }); });
このコードでは、vi.spyOnを使ってexample.methodをモックし、実装を変更しています。そして、テストが終了した後にmockRestoreを用いて元の実装に戻しています。このようにして、他のテストケースに影響を与えないようにすることができます。
y
yosi2025/04/10 0:46
.spyOn(global, "fetch")を使用した例を作成してください。
A
Answerer AIPowered by gpt-4o-mini
vi.spyOn(global, "fetch")を使用して、fetchをモックする具体例を示します。この例では、fetch関数をモックして、特定のレスポンスを返すようにします。
import { describe, it, expect, vi } from 'vitest'; describe('fetch API mock example', () => { it('should mock global fetch', async () => { // fetchをスパイし、モックした実装を提供 const mockResponse = { data: 'mocked data' }; const fetchSpy = vi.spyOn(global, 'fetch').mockResolvedValue({ json: async () => mockResponse, }); // fetchを呼び出す関数 const fetchData = async () => { const response = await fetch('https://example.com/data'); return response.json(); }; // fetchData関数を実行して、モックされたfetchのレスポンスを確認 const data = await fetchData(); expect(data).toEqual(mockResponse); // モックされたデータが返されることを確認 // モックを解除 fetchSpy.mockRestore(); }); it('should use the original fetch after restore', async () => { // 通常のfetchを呼び出す別のテストを実行 const response = await fetch('https://api.github.com'); // 実際のAPIを呼び出し const data = await response.json(); expect(data).toBeDefined(); // データが取得できることを確認 }); });
説明:
-
スパイの作成:
vi.spyOn(global, 'fetch')を使用して、global.fetchをモックします。 -
モックの実装:
mockResolvedValueを使って、fetchが呼び出された時に特定のレスポンスを返すように設定します。 -
関数の実行:
fetchData関数を定義し、モックされたfetchを呼び出します。 -
期待値の確認: レスポンスがモックされたデータと一致することを確認します。
-
モックの解除:
mockRestoreを使って、fetchを元の実装に戻します。 -
元の
fetchのテスト: 別のテストケースで、元のfetch関数が正常に動作するかを確認します。
この方式でfetchをモックし、テスト環境を制御することができます。
