¿Alguien puede explicar simplemente cuál es la diferencia práctica en cómo se ejecuta cada una de las siguientes pruebas?
Caso 1
const variable = generateVariable(); test('generates the correct value', () => { expect(variable).toBe('desired-value'); });Caso 2
test('generates the correct value', () => { const variable = generateVariable(); expect(variable).toBe('desired-value'); });Caso 3
describe('Variable generator', () => { beforeEach(() => { const variable = generateVariable(); }); test('generates the correct value', () => { expect(variable).toBe('desired-value'); }); });Caso 4
describe('Variable generator', () => { beforeAll(() => { const variable = generateVariable(); }); test('generates the correct value', () => { expect(variable).toBe('desired-value'); }); });Caso 1
Caso 2
Caso 3
Caso 4
En el caso 1, la variable estará disponible para todas las pruebas. Idealmente, esto debería ser algo que no esté mutado en las pruebas, de lo contrario, las pruebas podrían fallar aleatoriamente.
El caso 2 es la mejor manera si desea mantener la variable aislada. Su vinculación solo es válida dentro del cuerpo de prueba. Se pueden declarar otras ocurrencias de variable en otras pruebas.
En los casos 3 y 4, no podrá usar la variable en la prueba, ya que se declara e inicializa dentro de un cuerpo de función diferente (beforeEach o beforeAll). Como Seti mencionó en la respuesta anterior, obtendrá un error al intentar usar la variable .
Hay una diferencia sutil para superar este problema:
let variable; describe('Variable generator', () => { beforeEach(() => { variable = generateVariable(); }); test('generates the correct value', () => { expect(variable).toBe('desired-value'); }); }); En este caso, variable se puede utilizar en todas las pruebas y se inicializará antes de cada prueba. Es una práctica común si desea inicializar algo de la misma manera en muchas pruebas.