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
をモックし、テスト環境を制御することができます。