Skip to content

Commit 1557522

Browse files
committed
test: add memoization verification test for PageTitleInput
Adds a test to verify that fetchPageId is not called on re-renders when dependencies (wikiUrl, debouncedPageTitle) are unchanged. This test should fail with the current IIFE implementation because the async IIFE executes on every render, creating a new Promise and calling fetchPageId each time. The test proves that useMemo is necessary for proper memoization. Co-Authored-By: Claude
1 parent 1c4c255 commit 1557522

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

src/components/PageTitleInput.tsx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,5 +219,28 @@ if (import.meta.vitest) {
219219
);
220220
expect(errorMessage).toBeInTheDocument();
221221
});
222+
223+
it('does not call fetchPageId on re-render when dependencies are unchanged', async () => {
224+
mockFetchPageId.mockResolvedValue(123);
225+
226+
const { rerender } = await act(async () =>
227+
render(
228+
<PageTitleInput initialPageTitle="Test Title" wikiUrl={stubWikiUrl} />
229+
)
230+
);
231+
232+
// Initial render should trigger one call
233+
expect(mockFetchPageId).toHaveBeenCalledTimes(1);
234+
235+
// Re-render with same props (simulates parent re-render)
236+
await act(async () =>
237+
rerender(
238+
<PageTitleInput initialPageTitle="Test Title" wikiUrl={stubWikiUrl} />
239+
)
240+
);
241+
242+
// Should still be 1, not 2 - memoization should prevent duplicate calls
243+
expect(mockFetchPageId).toHaveBeenCalledTimes(1);
244+
});
222245
});
223246
}

0 commit comments

Comments
 (0)