| 1234567891011121314151617181920212223242526272829303132333435363738394041 |
- import { render, screen } from '@testing-library/react'
- import '@testing-library/jest-dom'
- import { z } from 'zod'
- import withValidation from '.'
- import { noop } from 'lodash-es'
-
- describe('withValidation HOC', () => {
- // schema for validation
- const schema = z.object({ name: z.string() })
- type Props = z.infer<typeof schema> & {
- age: number
- }
-
- const TestComponent = ({ name, age }: Props) => (
- <div>{name} - {age}</div>
- )
- const WrappedComponent = withValidation(TestComponent, schema)
-
- beforeAll(() => {
- jest.spyOn(console, 'error').mockImplementation(noop)
- })
-
- afterAll(() => {
- jest.restoreAllMocks()
- })
-
- it('renders the component when validation passes', () => {
- render(<WrappedComponent name='Valid Name' age={30} />)
- expect(screen.getByText('Valid Name - 30')).toBeInTheDocument()
- })
-
- it('renders the component when props is invalid but not in schema ', () => {
- render(<WrappedComponent name='Valid Name' age={'aaa' as any} />)
- expect(screen.getByText('Valid Name - aaa')).toBeInTheDocument()
- })
-
- it('does not render the component when validation fails', () => {
- render(<WrappedComponent name={123 as any} age={30} />)
- expect(screen.queryByText('123 - 30')).toBeNull()
- })
- })
|