运行 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
为什么!? 我该如何解决?
我尝试了什么:
- 在我的测试文件中引用
.js
文件,但这是不允许的
- 搜索骗子,主要是this question,但一个答案没有用,另一个(Chutzpah 的作者,不少)似乎与我自己的设置相似
- 重读the "Running Unit Tests with Typescript" documenation
- 将
reference
更改为路径的来源(有和没有斜杠结尾),但这给我带来了错误 Visual Studio
- 在单元文件中添加
class Foo {}
和assert.ok(!!new Foo())
测试,但这也失败了
- 在单元文件中添加
module My { export class Foo { } }
和assert.ok(!!new My.Foo())
测试,但这也失败了
使用来自其他 Chutzpah 扩展的 "Open in browser" 功能,并检查测试文件的来源(当来自测试资源管理器 运行 时,它可能也是为测试生成的), 我看到我的源文件 (my-unit.ts
或 my-unit.js
) 是 not referenced:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>QUnit Tests</title>
<link rel="stylesheet" type="text/css" href="file:///E:/path/to/TestFiles/QUnit/qunit.css"/>
<script type="text/javascript" src="file:///E:/path/to/TestFiles/QUnit/qunit.js"></script>
<script type="text/javascript" src="file:///E:/path/to/project/js-tests/my-unit.tests.js"></script>
<script>
var amdTestPaths = [];
// code ommitted for brevity...
</script>
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
</body>
</html>
添加
"References": [{ "Path": "js", "Includes": [ "**.ts" ], "Excludes": [ "**.d.ts" ] }
到我的 chutzpah.json
文件。这种方法可行,但是相当蛮力破解,因为现在 all 我的源文件将包含在 each 测试夹具中。 .
以上是我的实际场景的(希望)最小复制。我怎样才能让它工作?
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>
标签)。
我正在尝试编写一个带有 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
为什么!? 我该如何解决?
我尝试了什么:
- 在我的测试文件中引用
.js
文件,但这是不允许的 - 搜索骗子,主要是this question,但一个答案没有用,另一个(Chutzpah 的作者,不少)似乎与我自己的设置相似
- 重读the "Running Unit Tests with Typescript" documenation
- 将
reference
更改为路径的来源(有和没有斜杠结尾),但这给我带来了错误 Visual Studio - 在单元文件中添加
class Foo {}
和assert.ok(!!new Foo())
测试,但这也失败了 - 在单元文件中添加
module My { export class Foo { } }
和assert.ok(!!new My.Foo())
测试,但这也失败了 使用来自其他 Chutzpah 扩展的 "Open in browser" 功能,并检查测试文件的来源(当来自测试资源管理器 运行 时,它可能也是为测试生成的), 我看到我的源文件 (
my-unit.ts
或my-unit.js
) 是 not referenced:<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>QUnit Tests</title> <link rel="stylesheet" type="text/css" href="file:///E:/path/to/TestFiles/QUnit/qunit.css"/> <script type="text/javascript" src="file:///E:/path/to/TestFiles/QUnit/qunit.js"></script> <script type="text/javascript" src="file:///E:/path/to/project/js-tests/my-unit.tests.js"></script> <script> var amdTestPaths = []; // code ommitted for brevity... </script> </head> <body> <div id="qunit"></div> <div id="qunit-fixture"></div> </body> </html>
添加
"References": [{ "Path": "js", "Includes": [ "**.ts" ], "Excludes": [ "**.d.ts" ] }
到我的
chutzpah.json
文件。这种方法可行,但是相当蛮力破解,因为现在 all 我的源文件将包含在 each 测试夹具中。 .
以上是我的实际场景的(希望)最小复制。我怎样才能让它工作?
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>
标签)。