Nestjs“参考错误:文件未定义”仅在测试中

tan*_*379 5 typescript jestjs nestjs nrwl-nx

我的测试套件无法运行,因为“文件”输入类型未定义。仅当尝试运行测试时才会发生这种情况。该应用程序在开发中完美运行。下面是我的控制台输出。

\n
$ nx run build-support-cases-api-core:test\n\n> nx run build-support-cases-api-core:test \n FAIL   build-support-cases-api-core  libs/build-support-cases/api/core/src/lib/__test__/buildSupportCase.service.spec.ts\n  \xe2\x97\x8f Test suite failed to run\n\n    ReferenceError: File is not defined\n\n      4 | export class CreateReceiptInput {\n      5 |   @Field(() => String)\n    > 6 |   public receipt: File;\n        |                   ^\n      7 |\n      8 |   @Field(() => String)\n      9 |   public vendorName: string;\n\n      at Object.<anonymous> (../../../core/database/receipt/src/lib/dto/createReceipt.input.ts:6:19)\n      at Object.<anonymous> (../../../core/database/receipt/src/lib/dto/createReceipt.dto.ts:1:1)\n
Run Code Online (Sandbox Code Playgroud)\n

为了完整性,这是完整的源文件

\n
import { Field, ID, InputType } from "@nestjs/graphql";\n\n@InputType()\nexport class CreateReceiptInput {\n  @Field(() => String)\n  public receipt: File;\n\n  @Field(() => String)\n  public vendorName: string;\n\n  @Field(() => Date)\n  public purchaseDate: Date;\n\n  @Field(() => Number)\n  public totalDollarAmount: number;\n\n  @Field(() => String)\n  public purchasedBy: string;\n\n  @Field(() => String)\n  public note: string;\n\n  @Field(() => ID)\n  public updateId?: number;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

配置文件中是否有我丢失的内容?如何解决这个问题以便我的测试能够运行?

\n

tan*_*379 3

问题是 File 存在于 typescript 中,但不存在于 NodeJS(或扩展的 NestJS)中。然而,Blob 类型确实存在于 NestJS 中,因此如果您只需将 TypeScript 定义的文件类型复制到新文件并导入它,它就可以工作。

export interface File extends Blob {
  readonly lastModified: number;
  readonly name: string;
}

Run Code Online (Sandbox Code Playgroud)
import { Field, ID, InputType } from "@nestjs/graphql";
import { File } from "./interfaces";
@InputType()
export class CreateReceiptInput {
  @Field(() => String)
  public receipt: File;

  @Field(() => String)
  public vendorName: string;

  @Field(() => Date)
  public purchaseDate: Date;

  @Field(() => Number)
  public totalDollarAmount: number;

  @Field(() => String)
  public purchasedBy: string;

  @Field(() => String)
  public note: string;

  @Field(() => ID)
  public updateId?: number;
}
Run Code Online (Sandbox Code Playgroud)