Tengo una gran variedad de objetos JSON. Necesito ejecutar pruebas Jest en cada elemento individual. Primero intenté iterar a través de la matriz y luego escribir las pruebas en el ciclo como tales:
describe("Tests", (f) => { it("has all fields and they are valid", () => { expect(f.portions! >= 0).toBeTruthy(); expect(f.name.length > 0 && typeof f.name === "string").toBeTruthy(); }); it("has an image", () => { expect(f.image).toBeTruthy(); }); });Sin embargo, con este código, Jest se queja de que "su conjunto de pruebas debe contener al menos una prueba".
¿Tengo que recorrer esta matriz para cada prueba que tengo?
Jest tiene métodos describe.each , test.each e it.each para tus necesidades. Le permite hacer las mismas pruebas con diferentes entradas/salidas.
https://jestjs.io/docs/api#describeeachtablename-fn-timeout
Ejemplos:
Con global describe.each :
const params = [ [true, false, false], [true, true, true], [false, true, false], [false, false, true], ]; describe.each(params)('With params %s, %s, %s', (a, b, c) => { it(`${a} === ${b} should be ${c}`, () => { expect(a === b).toBe(c); }); });Producción :
PASS test/integration-tests/test.spec.ts (5.938s) With params true, false, false √ true === false should be false (2ms) With params true, true, true √ true === true should be true With params false, true, false √ false === true should be false (1ms) With params false, false, true √ false === false should be trueO con simple it.each:
const params = [ [true, false, false], [true, true, true], [false, true, false], [false, false, true], ]; describe('Dumb test', () => { it.each(params)('%s === %s should be %s', (a, b, c) => { expect(a === b).toBe(c); }); });Producción :
PASS test/integration-tests/test.spec.ts Dumb test √ true === false should be false (2ms) √ true === true should be true √ false === true should be false √ false === false should be true