【问题标题】:How to use Ava with Angular/CLI build typescript project如何使用 Ava 与 Angular/CLI 构建 typescript 项目
【发布时间】:2017-08-10 17:54:19
【问题描述】:

作为我正在构建的项目的一部分,我目前创建了一个 angular/cli 打字稿项目。我们目前正在使用业力测试框架,但如果可能的话,我们对切换到 AVA 非常感兴趣。

我目前已经完成了npm install --save-dev ava 我查看了 ava 文档中的打字稿设置 https://github.com/avajs/ava/blob/master/docs/recipes/typescript.md

我也按照主页本身的设置,在我的 package.json 中添加了一个“ava”部分

"ava": {
  "files": [
    "**/*.spec.ts"
  ],
  "source": [
    "**/*.ts"
  ],
  "match": [],
  "concurrency": 5,
  "failFast": true,
  "failWithoutAssertions": false,
  "tap": true,
  "powerAssert": false,
  "require": [
    "babel-register"
  ],
  "babel": "inherit"
}

我希望默认情况下这会获取我们当前编写的 spec.ts 文件,这些文件是为 karma 量身定制和编写的,但似乎并非如此,因为我只是得到了

# Couldn't find any files to test
not ok 1 - Couldn't find any files to test

1..0
# tests 0
# pass 0
# fail 1

我还尝试删除 Karma 当前放置的默认 test.ts 文件并将其更改为

import test from 'ava';
test('BLA', t => {
  t.pass();
});

希望我至少可以启动 something 来使用它,我以后可能会用它来添加/实现我们其余的测试文件。到目前为止,我也没有运气。

之前走这条路的人能否告诉我需要做什么才能让 Ava 测试亚军运行并正常工作?此外,可能需要做些什么来使我们现有的基于 karma/jasmine 的测试框架适应 Ava?

非常感谢您!

【问题讨论】:

    标签: angular testing npm ava


    【解决方案1】:

    我在搜索其他内容时遇到了这个答案,并意识到它可能值得一试,尽管这个问题被问到已经有一段时间了。

    一条通过ts-node 运行 AVA + TS 的路径。此外,如果使用了 tsconfig-paths 包,它有助于正确映射到 tsconfigpaths 属性。

    下面是 AVA 配置的大致样子。当然,您的路径可能会根据您的 Angular CLI 项目结构而有所不同,但适用的基本原则相同:

    "ava": {
      "compileEnhancements": false,
      "extensions": [
        "ts"
      ],
      "require": [
        "ts-node/register",
        "tsconfig-paths/register"
      ],
      "files": [
        "src/**/*.spec.ts"
      ],
      "sources": [
        "src/**/*.ts",
        "src/index.ts"
      ],
      "failWithoutAssertions": true
    }
    

    此外,您可能有一个特定于测试的tsconfig,在这种情况下,您需要通过ts-node 将使用的TS_NODE_PROJECT 环境变量指向它。因此,例如,您的 test 任务可能如下所示:

    TS_NODE_PROJECT=tsconfig-spec.json node_modules/.bin/ava --verbose
    

    请注意,由于 Node 本身只使用 CommonJS(至少在撰写本文时),因此您的 tsconfig 将需要编译为该模块格式。因此,继续上面的示例,您的 tsconfig-spec.json 可能看起来像这样,以及其他所需的选项:

    {
      "extends": "./tsconfig.json",
      "compilerOptions": {
        "module": "commonjs",
        "target": "es2015",
        "sourceMap": true
      }
    }
    

    AVA 和 Jasmine 之间的 API 并不相同,但根据我的经验,它实际上非常相似,以至于转换不会太痛苦——主要是机械性的。在撰写本文时,create a codemod for the conversion 存在一个问题;但是,它似乎还没有太大的吸引力。

    【讨论】:

      【解决方案2】:

      AVA 目前仅支持扩展名为 .js 的测试文件。您应该预编译您的 TypeScript 测试文件并更改 files 模式以匹配您构建目录中的测试。

      【讨论】:

      • 如果没有转换文件的预处理器,真的没有其他方法可以做到这一点吗? AVA 项目中的一些未解决的问题似乎表明,有一些方法可以在不必要的情况下执行此操作。
      • 很多人说他们的用例应该很容易,这是正确的,但这会使其他用例变得更加困难。因此不,目前没有其他方法可以做到这一点。有一个计划,但一周内只有这么多 OSS 小时。
      猜你喜欢
      • 1970-01-01
      • 2020-10-15
      • 2018-02-20
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 2017-10-23
      • 2018-12-07
      • 2017-08-07
      相关资源
      最近更新 更多