Usando forma parcial para pruebas unitarias con TypeScript
Digamos que quiero hacer una prueba unitaria a una función en TypeScript. Esta función usa un parámetro de tipo "opción" (objeto) con una forma compleja.
interface option {
param1 : string
param2 : number
param3 : {
param4 : string
param5 : boolean
}
.
.
.
param15 : string
}
const functionToTest = (opt:option)=>{
...do stuff with option
}
Ahora digamos que quiero escribir una prueba unitaria que imite el comportamiento correcto de functionToTest cuando param1 cambia, ignorando los otros parámetros que no tienen influencia en el resultado.
Tengo entendido que para hacer que mi prueba sea más resistente, puedo simplemente escribir en JS puro
const option1 = {
param1 : "foo"
}
y hacer mis pruebas
expect(functionToTest(option1)).to.be.true;
Sin embargo, si escribo mi prueba con TypeScript, tendré que escribir un objeto completo option1 con todos los miembros de la interfaz (simulados), aunque la mayoría serán ignorados, y esto desviará al lector del verdadero objetivo de la prueba.
¿Hay soluciones alternativas para esto o algo que deba cambiar en mi manera de pensar?
Respuesta #1
Puedes aprovechar el Partial de TypeScript para esto.
interface YourInterface {
prop: string;
foo: number;
}
const data: Partial<YourInterface> = {
prop: 'value'
};
// service is an instance of SomeService
service.sendData(<YourInterface> data);
class SomeService {
sendData(data: YourInterface) {
}
}
Respuesta #2
En mis pruebas, utilizo la aserción de tipo as para pasar objetos parciales a una función.
const options = {
param1: 'param1',
param2: 22
} as Option;
expect(functionToTest(options)).to.be.true;
