如何在Angular/CLI build typescript项目中使用Ava

如何在Angular/CLI build typescript项目中使用Ava,angular,testing,npm,ava,Angular,Testing,Npm,Ava,作为我正在构建的项目的一部分,我目前创建了一个angular/cli typescript项目。我们目前正在使用karma测试框架,但如果可能的话,我们非常有兴趣切换到AVA 我目前已经完成了npm安装--save dev ava 我已经看过了ava文档中的typescript设置 我还遵循了主页上的设置,并在我的package.json中添加了一个“ava”部分 "ava": { "files": [ "**/*.spec.ts" ], "source": [ "

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

我目前已经完成了npm安装--save dev ava 我已经看过了ava文档中的typescript设置

我还遵循了主页上的设置,并在我的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,可能需要做些什么


提前非常感谢

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

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

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

有一个路径可以通过
TS节点运行AVA+TS
。此外,还有一个
tsconfig paths
包,如果正在使用,它有助于正确映射到
tsconfig
paths
属性

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

"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\u NODE\u项目
环境变量指向它,而
TS NODE
将在该变量上拾取该变量。例如,您的
test
任务可能如下所示:

TS_NODE_PROJECT=tsconfig-spec.json node_modules/.bin/ava --verbose
请注意,由于节点本机仅使用CommonJS(至少在撰写本文时是这样),因此您的
tsconfig
需要编译为该模块格式。因此,继续上面的示例,除其他所需选项外,您的
tsconfig-spec.json
可能如下所示:

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

AVA和Jasmine之间的API是不一样的,但实际上,根据我的经验,它非常相似,以至于转换不会太痛苦,主要是机械的。在撰写本文时,有一个问题有待解决;然而,它似乎还没有太大的吸引力。

我在寻找其他东西时遇到了这个答案,并意识到它可能值得一提,尽管这个问题已经问了一点了

有一个路径可以通过
TS节点运行AVA+TS
。此外,还有一个
tsconfig paths
包,如果正在使用,它有助于正确映射到
tsconfig
paths
属性

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

"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\u NODE\u项目
环境变量指向它,而
TS NODE
将在该变量上拾取该变量。例如,您的
test
任务可能如下所示:

TS_NODE_PROJECT=tsconfig-spec.json node_modules/.bin/ava --verbose
请注意,由于节点本机仅使用CommonJS(至少在撰写本文时是这样),因此您的
tsconfig
需要编译为该模块格式。因此,继续上面的示例,除其他所需选项外,您的
tsconfig-spec.json
可能如下所示:

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

AVA和Jasmine之间的API是不一样的,但实际上,根据我的经验,它非常相似,以至于转换不会太痛苦,主要是机械的。在撰写本文时,有一个问题有待解决;但是,它看起来还没有太大的吸引力。

如果没有转换文件的预处理器,真的没有其他方法可以做到这一点吗?AVA项目的一些公开问题似乎表明,在没有必要的情况下,有一些方法可以做到这一点。有很多人说,对于他们的用例来说,这应该很容易,这是正确的,但这使得其他用例更加困难。因此没有,目前没有其他方法可以做到这一点。有一个计划,但是一周只有这么多的OSS时间。如果没有转换文件的预处理器,真的没有其他方法可以做到这一点吗?AVA项目的一些公开问题似乎表明,在没有必要的情况下,有一些方法可以做到这一点。有很多人说,对于他们的用例来说,这应该很容易,这是正确的,但这使得其他用例更加困难。因此没有,目前没有其他方法可以做到这一点。有一个计划,但一周只有这么多OSS小时。