Estoy haciendo una prueba simple similar a la siguiente:
it("Must fail", () => { const length = person.list().length; expect(person.add({ name: "John", age: -5, gender: 'M' })).toEqual( expect.objectContaining({ id: expect.any(Number), name: expect.any(String), age: expect.any(Number), gender: 'M' || 'F', // only 'M' or 'F' }) ); // to ensure that a new person was added expect(person.list().length).toEqual(length+1); });
El retorno de db.add es un objeto con el id incluido. Sin embargo, me gustaría esperar que la edad no sea solo cualquier número, sino también un número con una edad mayor o igual a cero.
Podría usar valores discretos en el género o especificar la age: 0 || 1 || 2 || 3 || ...
, pero si quiero hacer coincidir el género con un patrón específico o especificar que la edad está en un rango de valores permitidos, ¿cómo podría hacerlo?
No puedo usar expect(age) inside, por lo que sé en mi investigación para esperar algo sobre el valor de las claves.
Parece que está tratando de hacer mucho en la menor cantidad de líneas de código posible, lo que lo coloca en esta situación, intente algo como esto:
it("should set age to 0 when provided age is lower than 0", () => { const storedPerson = person.add({ name: "John", age: -5, gender: 'M' }); expect(storedPerson.age).toBe(0); });
Si desea verificar todos los valores pero no desea escribir 5 expect
hacerlo, intente esto:
it("should properly store new person", () => { const length = person.list().length; const expectedPerson = { id: expect.any(Number), name: "John", age: 0, gender: 'M' }; const storedPerson = person.add({ name: "John", age: -5, gender: 'M' }); expect(storedPerson).toEqual(expectedPerson); expect(person.list().length).toEqual(length+1); });
Pero para ser honesto, recomendaría mi primer ejemplo. Con el segundo, probaría mucho en una sola prueba, verificando la validación adecuada de la edad, verificando si se agregó la identificación, verificando los valores asignados correctamente y verificando la longitud de las listas. Cuando esa prueba falla, no sabría qué salió mal según el nombre de la prueba. En las pruebas unitarias, intente probar lo menos posible en una prueba.