运行 Typescript QUnit 使用 Chutzpah 测试 Typescript 源文件

Run Typescript QUnit tests for Typescript source files with Chutzpah

我正在尝试编写一个带有 Typescript 源文件单元测试的 Typescript 文件。我的项目结构:

/js/my-unit.ts
/js-tests/my-unit.tests.ts
/Scripts/typings/qunit/qunit.d.ts
/chutzpah.json

my-unit.ts 内容如下:

function globalFunc() { return { dummy: "object" }; }

这是my-unit.tests.ts内容:

/// <reference path="../scripts/typings/qunit/qunit.d.ts" />
/// <reference path="../js/my-unit.ts" />
QUnit.test("Test 1", assert => assert.ok(!!globalFunc()));

这是 chutzpah.json 文件:

{
    "Compile": {
        "Mode": "External",
        "Extensions": [ ".ts" ],
        "ExtensionsWithNoOutput": [ ".d.ts" ]
    },
    "Tests": [
        { "Includes": [ "**/*-tests/**.ts" ] }
    ]
}

测试是红色的,因为:

Can't find variable: globalFunc

为什么!? 我该如何解决?


我尝试了什么:


以上是我的实际场景的(希望)最小复制。我怎样才能让它工作?

TL;DR 版本

经过更多搜索,我发现将 ExpandReferenceComments 设置为 true 可以解决问题:

"Tests": [
    {
        "ExpandReferenceComments":  true,
        "Includes": [ "**/js-tests/**.ts" ]
    }
]

解释 here 并将确保 /// 注释扩展为 Chutzpah 生成的测试文件中的 <script> 标签。


完整解决方案

以下是可运行的最小复制的所有文件:

/chutzpah.json

{
    "Compile": {
        "Mode": "External",
        "Extensions": [ ".ts" ],
        "ExtensionsWithNoOutput": [ ".d.ts" ]
    },
    "Tests": [
        {
            "ExpandReferenceComments":  true,
            "Includes": [ "**/js-tests/**.ts" ]
        }
    ]
}

/js/my-unit1.ts

function globalFunc1() { return { dummy: "object 1" }; }

/js/my-unit2.ts

function globalFunc2() { return { dummy: "object 2" }; }

/js-tests/my-unit1.tests.ts

/// <reference path="../scripts/typings/qunit/qunit.d.ts" />
/// <reference path="../js/my-unit1.ts" />
QUnit.test("globalFunc1 works", assert => assert.ok(!!globalFunc1()));

/js-tests/my-unit2.tests.ts

/// <reference path="../scripts/typings/qunit/qunit.d.ts" />
/// <reference path="../js/my-unit2.ts" />
QUnit.test("globalFunc2 works", assert => assert.ok(!!globalFunc2()));

脚注

我不确定为什么 ExpandReferenceComments 的默认值是 false,或者什么时候它甚至有用(也许当 Comple Mode 不是 External?).

上面的“完整解决方案”包括两个个单元和两个个测试文件,因为我想验证引用是否已扩展每个测试文件,它确实如此(如果你在浏览器中 运行 它们,你会看到 Chutpah 只为那个 fixture 生成 <script> 标签)。