【问题标题】:Declaration file missing when running ng test运行 ng test 时缺少声明文件
【发布时间】:2020-11-08 03:05:22
【问题描述】:

我最近开始研究一个现有的 Angular 项目 单元测试已经被破坏了很长一段时间。不幸的是,由于对声明文件中定义的对象的引用错误,我无法让它们运行。此声明文件位于项目的根目录中。在运行时,实际的库是从我们的开发服务器加载的,一切正常。

但是,当运行 ng test 时,Jasmine 抱怨找不到引用:

    ReferenceError: SomeObject is not defined
        at <Jasmine>
        at MyService.getDetails (http://localhost:9876/_karma_webpack_/src/app/MyService.service.ts:196:33)

这是正在运行的应用程序的 tsconfig,运行良好:

{
  "extends": "../tsconfig.base.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "baseUrl": "./",
    "experimentalDecorators": true,
    "types": []
  },
  "files": [
    "main.ts",
    "polyfills.ts",
    "someobject.d.ts"
  ],
  "include": [
    "src/**/*.d.ts"
  ]
}

测试配置类似,但报上述错误:

{
  "extends": "../tsconfig.base.json",
  "compilerOptions": {
    "outDir": "../out-tsc/spec",
    "baseUrl": "./",
    "types": [
      "jasmine",
      "node"
    ]
  },
  "files": [
    "someobject.d.ts",
    "polyfills.ts",
    "test.ts"
  ],
  "include": [
    "**/*.spec.ts",
    "**/*.d.ts"
  ]
}

someobject.d.ts 文件位于项目的根目录下,与 polyfills.ts 和 main.ts 处于同一级别。

这只是我开发的第二个 Angular 应用程序,所以我在这方面的经验并不多。我也是第一次遇到 TypeScript 声明文件。我在网上找到的大多数资源都是关于处理通过 npm 为 lodash 等库分发的声明文件。我发现几乎没有信息可以在这样的项目中使用声明文件。

我正在寻找一些指向正确方向的指针。

显然,我编辑了类和文件名,因为我不能随意逐字分享源代码。

【问题讨论】:

    标签: angular typescript jasmine declaration-files


    【解决方案1】:

    在尝试了几件事后,我通过添加实际库并将其仅包含在 angular.json 中进行测试来解决:

    "test": {
        "builder": "@angular-devkit/build-angular:karma",
        "options": {
            ...
            "scripts": [
                "someobject.js"
            ],
            ....
        }
    }
    

    这样,脚本在测试时可用,但不包含在由外部服务提供的生产环境中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 2012-10-04
      • 2013-07-11
      • 2013-11-13
      • 1970-01-01
      相关资源
      最近更新 更多