Angular 项目中的笑话和茉莉花

Ada*_*dam 5 jasmine typescript jestjs angular

我已经在一个有角度的项目中用笑话有效地替换了业力/茉莉花,并且测试运行得很好......但是:

我没有删除茉莉花(量角器需要它),现在我遇到了一个问题,如果我在规范文件中使用它spyOnjest.spyOn它会使用茉莉花间谍而不是笑话间谍(它们的实现方式不同)。这是一种糟糕的开发人员体验,我想从我的单元测试中完全删除 jasmine,但我不知道如何做。

如何设置 tsconfig.spec.json 在编译规范文件期间排除 jasmine?

我正在使用jest-preset-angularwhich use ts-jest.

如果我没有提供足够的信息,请随时骚扰我以获取更多信息!

这是我的tsconfig.spec.json文件:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/spec",
    "module": "commonjs",
    "target": "es5",
    "baseUrl": ""
  },
  "files": [
    "test.ts",
    "polyfills.ts"
  ],
  "include": [
    "**/*.spec.ts",
    "**/*.d.ts"
  ]
}

Run Code Online (Sandbox Code Playgroud)

这是我的tsconfig.json文件:

{
  "compileOnSave": false,
  "compilerOptions": {
    "importHelpers": true,
    "outDir": "./dist/out-tsc",
    "baseUrl": "public",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types" <-- jasmine types are in here too!
    ],
    "lib": [
      "es2016",
      "dom"
    ],
    "module": "es2015"
  }
}

Run Code Online (Sandbox Code Playgroud)

我的笑话配置告诉我像这样ts-jest使用我的文件:tsconfig.spec.json

  "globals": {
    "ts-jest": {
      ...
      "tsConfig": "<rootDir>/public/tsconfig.spec.json" <-- here!
    }
  }
Run Code Online (Sandbox Code Playgroud)

Bri*_*ams 2

Jest基于Jasmine包括“轻型”版本...

...sospyOn 存在于Jest源代码中。


它已被弃用且未记录,但正如您所发现的,它仍然可以调用它。

它很可能在未来的版本中被完全删除Jest(遗留的Jasmine部分正在逐渐被删除)。


为了帮助追踪对spyOn您的呼叫,可以使用errorOnDeprecatedCLI 选项。

Jest像这样启动:

jest --errorOnDeprecated

spyOn...并且您将在测试中随时调用时看到记录的错误。