0

作为我正在构建的项目的一部分,我目前有一个我创建的 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

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

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

希望我至少可以引导一些可以使用的东西,我以后可以用它来添加/实现我们其余的测试文件。到目前为止,我也没有运气。

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

非常感谢您!

4

2 回答 2

2

我在寻找其他东西时遇到了这个答案,并意识到它可能值得加入,尽管自从提出问题以来已经有一段时间了。

一条通过 运行 AVA + TS 的路径ts-node。此外,如果正在使用,还有一个tsconfig-paths包可以帮助正确映射到tsconfig'paths属性。

下面是 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
}

此外,您可能有一个 testing-specific 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 并不相同,但根据我的经验,它实际上非常相似,以至于转换不会太痛苦——主要是机械的。在撰写本文时,为转换创建 codemod存在一个问题;但是,看起来它还没有太大的吸引力。

于 2018-10-14T20:32:32.233 回答
1

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

于 2017-08-12T15:35:07.447 回答