Voy a probar un método (usando el lenguaje TypeScript) para asegurarme de que devuelve una matriz de una clase.
Aquí está mi código:
it('should return an array of Entity class', async () => { expect(await service.getAll()).toBeInstanceOf(Entity[]); }); Pero muestra el siguiente mensaje de error en [] :
Una expresión de acceso a elementos debe tomar un argumento.
Dado que las pruebas de Jest son pruebas de tiempo de ejecución , solo tienen acceso a la información de tiempo de ejecución. Está tratando de usar un tipo, que es información en tiempo de compilación. TypeScript ya debería estar haciendo el aspecto de tipo de esto por usted. (Más sobre esto en un momento.)
El hecho de que las pruebas solo tengan acceso a la información del tiempo de ejecución tiene un par de ramificaciones:
Si es válido que getAll devuelva una matriz vacía (porque no hay ninguna entidad para obtener), la prueba no puede decirle si la matriz habría tenido elementos de Entity si no hubiera estado vacía. Todo lo que puede decirte es que tiene una matriz.
En el caso no vacío, debe verificar cada elemento de la matriz para ver si es una Entity . Has dicho que Entity es una clase, no solo un tipo, así que eso es posible. No soy un usuario de Jest (debería serlo), pero no parece tener una prueba específica para esto; Sin embargo, tiene que ser toBeTruthy , y podemos usar each para decirnos si every elemento es una Entity :
it('should return an array of Entity class', async () => { const all = await service.getAll() expect(all.every(e => e instanceof Entity)).toBeTruthy(); }); Sin embargo, tenga en cuenta que todas las llamadas a every en una matriz vacía devuelven true , por lo que nuevamente, el problema de la matriz vacía surge.
Si sus pruebas de Jest están escritas en TypeScript, puede mejorar eso asegurándose de que TypeScript pruebe el tipo de tiempo de compilación del valor de retorno de getAll :
it('should return an array of Entity class', async () => { const all: Entity[] = await service.getAll() // ^^^^^^^^^^ expect(all.every(e => e instanceof Entity)).toBeTruthy(); }); TypeScript se quejará de esa asignación en tiempo de compilación si no es válida, y Jest se quejará en tiempo de ejecución si ve una matriz que contiene un objeto que no es Entity .
Pero jonrsharpe tiene un buen punto : esta prueba puede no ser útil en comparación con las pruebas de valores específicos que deberían estar allí.