Rumah > Soal Jawab > teks badan
Cara menguji sama ada komponen anak dalam komponen induk dipanggil dengan betul dengan prop yang betul apabila komponen anak diejek. Saya mendapat ralat:
RangeError: Maximum call stack size exceeded
Konfigurasi vitest saya:
import svgr from 'vite-plugin-svgr' import { defineConfig } from 'vitest/config' import type { UserConfig } from 'vitest/config' import { resolve } from 'path' export default defineConfig({ test: { environment: 'jsdom', setupFiles: ['./tests/setup.ts'], environmentMatchGlobs: [['./src/**/*.tsx', 'jsdom']], globals: true, }, resolve: { alias: [{ find: '@', replacement: resolve(__dirname, './src') }], }, plugins: [svgr()], } as UserConfig)
Kod ujian saya:
import { render, screen } from '@testing-library/react' import { vi } from 'vitest' import Input from '@/components/Input/Input' import Login from './Login' vi.mock('@/components/Input/Input', () => ({ default: vi.fn(), })) describe('ConfirmEmail', () => { it('renders correctly', () => { render(<Login />) expect(screen.getByRole('heading', { name: /Login to your account/i })) expect(Input).toHaveBeenCalledWith({ label: 'email', }) //error: RangeError: Maximum call stack size exceeded }) })
P粉5510842952024-01-17 00:18:16
Ia seperti menguji prop komponen sebagai jenaka. Saya merujuk artikel ini sebagai penyelesaian saya: https://robertmarshall.dev/blog/react-component-props-passed-to-child-jest-unit-test/
Memandangkan anda tidak memasukkan komponen asal, saya tidak dapat mengesahkan pembetulan. Saya akan mencuba sesuatu seperti ini:
const mockInput = vi.fn() vi.mock('@/components/Input/Input', () => ({ default: (props) => { mockInput(props) return <div>Input</div> }, })) describe('Confirm Email', () => { it('renders correctly', () => { render(<Login />) expect(screen.getByRole('heading', { name: /Login to your account/i })) expect(mock Input).toHaveBeenCalledWith( expect.objectContaining({ label: 'email' }) ) }) })