Estoy usando ts-jest para probar un SDK/módulo JS/TS. Me encuentro con un problema extraño en el que se ejecutará una prueba Jest (sin fallas de compilación/importación) pero no puedo instanciar correctamente un objeto de la clase apropiada.
test("Should build unit", () => { const builder = new UnitBuilder("TEST_UNIT"); console.log(builder); // prints "{}" const unit = builder .addResource(...) .build(); expect(unit.name).toBe("TEST_UNIT"); }); La prueba falla con: TypeError: builder.addResource is not a function ya que el objeto instanciado está vacío. Aquí está la clase en cuestión:
export class UnitBuilder { constructor(templateId: string) { this.payload = { templateId, parameters: [], }; } public addResource = (resource: CreateResourcePayload) => { // do stuff }; public build = () => { // do stuff }; public payload: CreateUnitPayload; } Supongo que esto tiene algo que ver con la transpilación jest o ts-jest , por ejemplo, babel, pero ¿quizás también tiene algo que ver con la configuración jest?
jest.config.ts
import type { Config } from "@jest/types"; const config: Config.InitialOptions = { preset: "ts-jest", testEnvironment: "node", moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json"], verbose: true, automock: true, testMatch: ["**/__tests/*.test.ts"], roots: ["<rootDir>/src"], transform: { "^.+\\.(ts|tsx)$": "ts-jest", }, }; export default config;Eliminando automock: true solucionó el problema.