Tengo esta prueba simple:
import React from 'react'
import { render } from '@testing-library/react'
import Button from '.'
describe('Button', () => {
it('renders button without crashing', () => {
const label="test"
render(<Button label={label} />)
})
})
y tengo un jest.config.json
con este contenido
{
"setupFilesAfterEnv": [
"<rootDir>/lib/settings/setupTests.ts"
]
}
y en mi setupTests.ts
Tengo
import '@testing-library/jest-dom'
cuando corro npm run test
(que solo corre jest
), Tuve el siguiente error:
El siguiente error puede deberse al uso de un entorno de prueba incorrecto, consulte
https://jestjs.io/docs/configuration#testenvironment-string.Considere usar el entorno de prueba “jsdom”.
¿Que estoy haciendo mal? Esto solía funcionar antes de una actualización.
Moistbobo
En tus package.json
o jest.config.js
/jest.config.ts
archivo, cambie el valor del testEnvironment
propiedad a jsdom
.
package.json
"jest":{
"testEnvironment": "jsdom"
}
jest.config.[js|ts]
module.exports = {
"testEnvironment": "jsdom"
}
Nota importante para broma >28
Si está utilizando jest 28, deberá instalar jest-environment-jsdom
por separado por:
npm: npm i jest-environment-jsdom --save-dev
hilo: yarn add -D jest-environment-jsdom
¿Por qué?
Por defecto, jest usa el node
entorno de prueba. Básicamente, esto hace que cualquier prueba destinada a un entorno de navegador no sea válida.
jsdom
es una implementación de un entorno de navegador que admite este tipo de pruebas de interfaz de usuario.
Para Jest versión 28 y superior, jest-environment-jsdom
fue eliminado del valor predeterminado jest
instalación para reducir el tamaño del paquete.
Lectura adicional
-
Tu respuesta me ayudó. Gracias. Sin embargo, lo que usted proporciona como
jest.config.[js|ts]
es formato json. Para usar ese fragmento, debe cambiar el nombre del archivo ajest.config.json
.– Betty
8 de noviembre de 2022 a las 20:42
-
@Betty hizo la versión js/ts más explícita
– Moistbobo
9 de noviembre de 2022 a las 5:31
-
Es
@testing-library/jest-dom
¿También se requiere para pruebas de broma en el navegador? ¿O ese paquete simplemente agrega afirmaciones adicionales quejest-environment-jsdom
no tiene de forma nativa?–Michael Lynch
15 de marzo a las 19:40
-
@MichaelLynch Creo que es un paquete opcional si está utilizando el conjunto de biblioteca de pruebas, por lo que no es necesario escribir pruebas de broma básicas. Su evaluación al agregar afirmaciones adicionales es correcta.
– Moistbobo
16 de marzo a las 9:01
Esto se puede resolver por archivo de prueba agregando un @jest-environment
docblock al principio de su archivo. Por ejemplo:
/** @jest-environment jsdom */
import React from 'react'
import { render } from '@testing-library/react'
import Button from '.'
describe('Button', () => {
it('renders button without crashing', () => {
const label="test"
render(<Button label={label} />)
})
})
Si su proyecto tiene una combinación de archivos UI y no UI, a menudo es preferible cambiar todo el proyecto configurando "testEnvironment": "jsdom"
dentro de su configuración de package.json o Jest. Al omitir la inicialización del entorno JSDom para pruebas que no son de interfaz de usuario, Jest puede ejecutar sus pruebas más rápido. De hecho, es por eso que Jest cambió el entorno de prueba predeterminado en Jest 27.
-
/** @jest-environment jsdom */ funcionó cuando se colocó encima del archivo, pero no funcionó cuando se colocó encima de un método de prueba. ¿Sabes por qué?
– redochka
16 de marzo a las 10:54
-
@redochka: solo se puede cambiar por archivo, no por método. Ver jestjs.io/docs/configuration#testenvironment-string
–Josh Kelley
16 de marzo a las 17:35
por defecto, el valor para testEnvironment es nodo que ejecuta todos los casos de prueba en el entorno node.js, pero js-dom proporciona un navegador como entorno. en lugar de agregar el valor jsdom, incluso puede agregar un valor específico del archivo como el que se muestra a continuación, que funcionará.
/**
* @jest-environment jsdom
*/
// the above comment helps
test('use jsdom in this test file', () => {
const element = document.createElement('div');
expect(element).not.toBeNull();
});
Incluso podemos agregar entornos específicos de archivos de prueba, consulte este enlace.
Prueba esto.
module.exports = {
testEnvironment: 'jsdom',
}