如何使用 Ava 和 Angular/CLI 构建打字稿项目

How to use Ava with Angular/CLI build typescript project

作为我正在构建的项目的一部分,我目前创建了一个 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 文件,这些文件是为业力定制和编写的,但似乎并非如此,因为我只是给出

# 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

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

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

希望我至少可以 bootstrap 一些东西 来处理我也许可以使用 add/implement 我们其余的测试文件之后。到目前为止,我也没有运气。

以前走过这条路的人能告诉我需要做什么才能让 Ava 测试亚军启动并工作吗?此外,可能需要做些什么才能使我们目前现有的基于 karma/jasmine 的测试框架适应 Ava?

非常感谢您!

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

我在搜索其他内容时 运行 进入了这个答案,并意识到它可能值得插话,尽管自问这个问题以来已经有一段时间了。

是通过 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_PROJECT 环境变量指向它,ts-node .因此,例如,您的 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 有一个未解决的问题;然而,它似乎还没有太大的吸引力。