Tengo un componente con algunas partes que se representan condicionalmente en función de alguna configuración en el objeto de la window . Todo esto funciona, puedo confirmar esto manualmente.
Tengo este tipo de configuración de prueba, pero lo he simplificado un poco:
it('renders both by default', () => { // PASS const Comp = getComponent(); render(<Comp />); expect(screen.getByTestId('one')).toBeInTheDocument(); expect(screen.getByTestId('two')).toBeInTheDocument(); }) it.each([ { testId: 'one', otherTestId: 'two'}, { testId: 'two', otherTestId: 'one' }, ])('renders $testId, not $otherTestId', (testId, otherTestId) => { // FAIL delete window.config[otherTestId]; // this works const Comp = getComponent(); render(<Comp />); expect(screen.getByTestId(testId)).toBeInTheDocument(); expect(screen.getByTestId(otherTestId)).not.toBeInTheDocument(); })Pero estoy recibiendo este error:
Expected done to be called once, but it was called multiples times. Reason 'two'.Lo cual no es algo que haya visto antes. Ninguna de mis pruebas que se ejecutan aquí es asíncrona. El componente no es asíncrono. No estoy usando hecho en ningún lugar cerca de esto.
¿Qué esta pasando?
Jest espera que testId sea un objeto que contenga todas las variables de prueba y que otherTestId sea la función done .
No estoy seguro de por qué cree que se llama varias veces, pero haciendo el primer argumento:
{ testId, otherTestId }Funciona alrededor de esto y coincide con la documentación correctamente.