wwf
2025-05-20 938c3e5a587ce950a94964ea509b9e7f8834dfae
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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()
  })
})