angular - ¿Cómo hacer pruebas unitarias de interfaces de modelo en TypeScript?
export interface User {
name: string;
}
¿Cómo puedo realizar pruebas unitarias a la interfaz anterior, para que Karma pueda mostrarla en el informe de cobertura de código?
Ya intenté crear el objeto y afirmar algunas propiedades, pero no funcionó. La prueba pasa, pero karma no la considera en el informe de cobertura de código.
import { User } from "./user";
describe('User', () => {
it('test', () => {
const obj: User = {
name: "xxx",
}
expect(obj.name).toEqual("xxx");
});
});
Respuesta #1
No puedes. No hay código que cubrir aquí: nada es ejecutable.
Y las interfaces solo existen en tiempo de compilación. No existen en tiempo de ejecución.
Respuesta #2
Para futuros usuarios con una pregunta similar, he ideado el siguiente sistema para probar interfaces (que solo uso con interfaces particularmente caprichosas, como aquellas que he autogenerado). Es absolutamente una solución provisional, pero sí falla mis compilaciones si la interfaz no está correctamente especificada.
Primero, en la "prueba", convierte un objeto con los campos y tipos esperados a la interfaz. Por ejemplo,
interface MyInterface = {
id: number;
createTime: Date;
}
test("MyInterface should have appropriate fields and types", () => {
({
id: 3,
createTime: new Date(),
} as MyInterface);
})
Luego, agregué un paso de compilación para compilar el TypeScript, lo cual producirá un error si se cambia MyInterface.
tsc --noEmit
Una vez más: mis pruebas no tienen afirmaciones, por lo que no son una prueba unitaria real, y esto es una solución temporal. Pero este proceso me ha alertado sobre problemas varias veces, por lo que cumple su propósito.
