带有单元测试的 Typescript 项目,使用 Chutzpah 测试的问题 运行
Typescript project with Unit tests, problems running tests with Chutzpah
我在 Visual Studio 有一个使用 typescript 和 requirejs 的项目,那就是 运行 在 Chutzpah 的帮助下进行 QUnit 测试。
我项目中的文件夹结构基本上是这样的:
- chutzpah.json
- app/
- index.html
- js/
- config.js
- main.ts
- Module.ts
- tests/
- Test1.ts
到目前为止,我已经配置了 requirejs,所以在我所有的导入中,我必须使用
app/js/Module,例如加载那个。
测试也 运行 很好。
现在,我已经更改了我的 requirejs 配置以使用 app 文件夹中的 js baseUrl,因此我可以仅使用 "Module" 进行导入。应用程序本身 运行 没问题,但我无法让测试正常工作。
对于我当前的 chutzpah.json,它似乎想要从 ../tests/ 加载测试文件,所以对于 Test1 示例,它会想要加载 ../tests/Test1.js
这是我的 config.js:
require.config({
baseUrl: 'js',
paths: {
'swfJQ': '../libs/js/swfJQ'
},
shim: {
'swfJQ': {
"exports": "swfJQ"
}
}
});
这是我的 chutzpah.json:
{
"Framework": "qunit",
"TestHarnessReferenceMode": "AMD",
"TestHarnessLocationMode": "SettingsFileAdjacent",
"TypeScriptModuleKind": "AMD",
"Tests": [ { "Path": "tests", "Includes": [ "*Tests.ts" ] } ],
"AMDBaseUrl": "js",
"AMDAppDirectory": "app",
"References": [
{ "Path": "app/libs/js/jquery.js", "IsTestFrameworkFile": true },
{ "Path": "app/libs/require.js", "IsTestFrameworkFile": true },
{ "Path": "app/config.js" },
{ "Path": "require.d.ts", "IncludeInTestHarness": false },
{ "Path": "qunit.d.ts", "IncludeInTestHarness": false },
{ "Path": "tests", "IncludeInTestHarness": false, "Excludes": ["*.html"] },
{ "Path": "app/js", "IncludeInTestHarness": false }
],
"EnableCodeCoverage ": "true",
"CodeCoverageIncludes": [
"*app/js/*"
],
"CodeCoverageExcludes": [
"app/libs/*",
"tests/*"
]
}
这是测试文件之一:
import Replay = require('../app/js/Module');
QUnit.module("Module tests");
test("Module.constructor", function (assert: QUnitAssert) { /* stuff */ }
我认为 require('../app/js/Module') 或多或少是罪魁祸首并将范围设置为 ../,但如果我以其他方式编写代码,打字稿编译器将不会编译。
我想这可能是我很想念的东西,但我无法固定它。
也许这不是我遇到的无礼问题,但我的一般 Typescript 设置应该不同(所以我不必在我的测试文件中使用 require('../app ... '))?
原来这应该很简单:
我必须将 Chutzpah 配置中的 AMDBaseUrl 设置为 "app/js",并删除 AMDAppDirectory 属性。
不敢相信我以前没有尝试过。
我的chutzpah.json:
{
"Framework": "qunit",
"TestHarnessReferenceMode": "AMD",
"TestHarnessLocationMode": "SettingsFileAdjacent",
"TypeScriptModuleKind": "AMD",
"Tests": [ { "Path": "tests", "Includes": [ "*Tests.ts" ] } ],
"AMDBasePath": "app/js",
"References": [
{ "Path": "app/libs/js/jquery.js", "IsTestFrameworkFile": true },
{ "Path": "app/libs/js/kendo.ui.core.min.js", "IsTestFrameworkFile": true },
{ "Path": "app/libs/js/mediaelement-and-player.js", "IsTestFrameworkFile": true },
{ "Path": "app/libs/require.js", "IsTestFrameworkFile": true },
{ "Path": "app/libs/js/SCORM_API_wrapper.js" },
{ "Path": "require.d.ts", "IncludeInTestHarness": false },
{ "Path": "qunit.d.ts", "IncludeInTestHarness": false },
{ "Path": "tests", "IncludeInTestHarness": false, "Excludes": ["*.html"] },
{ "Path": "app/js", "IncludeInTestHarness": false }
],
"EnableCodeCoverage ": "true",
"CodeCoverageIncludes": [
"*app/js/*"
],
"CodeCoverageExcludes": [
"app/libs/*",
"tests/*"
]
}
我在 Visual Studio 有一个使用 typescript 和 requirejs 的项目,那就是 运行 在 Chutzpah 的帮助下进行 QUnit 测试。
我项目中的文件夹结构基本上是这样的:
- chutzpah.json
- app/
- index.html
- js/
- config.js
- main.ts
- Module.ts
- tests/
- Test1.ts
到目前为止,我已经配置了 requirejs,所以在我所有的导入中,我必须使用 app/js/Module,例如加载那个。 测试也 运行 很好。
现在,我已经更改了我的 requirejs 配置以使用 app 文件夹中的 js baseUrl,因此我可以仅使用 "Module" 进行导入。应用程序本身 运行 没问题,但我无法让测试正常工作。 对于我当前的 chutzpah.json,它似乎想要从 ../tests/ 加载测试文件,所以对于 Test1 示例,它会想要加载 ../tests/Test1.js
这是我的 config.js:
require.config({
baseUrl: 'js',
paths: {
'swfJQ': '../libs/js/swfJQ'
},
shim: {
'swfJQ': {
"exports": "swfJQ"
}
}
});
这是我的 chutzpah.json:
{
"Framework": "qunit",
"TestHarnessReferenceMode": "AMD",
"TestHarnessLocationMode": "SettingsFileAdjacent",
"TypeScriptModuleKind": "AMD",
"Tests": [ { "Path": "tests", "Includes": [ "*Tests.ts" ] } ],
"AMDBaseUrl": "js",
"AMDAppDirectory": "app",
"References": [
{ "Path": "app/libs/js/jquery.js", "IsTestFrameworkFile": true },
{ "Path": "app/libs/require.js", "IsTestFrameworkFile": true },
{ "Path": "app/config.js" },
{ "Path": "require.d.ts", "IncludeInTestHarness": false },
{ "Path": "qunit.d.ts", "IncludeInTestHarness": false },
{ "Path": "tests", "IncludeInTestHarness": false, "Excludes": ["*.html"] },
{ "Path": "app/js", "IncludeInTestHarness": false }
],
"EnableCodeCoverage ": "true",
"CodeCoverageIncludes": [
"*app/js/*"
],
"CodeCoverageExcludes": [
"app/libs/*",
"tests/*"
]
}
这是测试文件之一:
import Replay = require('../app/js/Module');
QUnit.module("Module tests");
test("Module.constructor", function (assert: QUnitAssert) { /* stuff */ }
我认为 require('../app/js/Module') 或多或少是罪魁祸首并将范围设置为 ../,但如果我以其他方式编写代码,打字稿编译器将不会编译。 我想这可能是我很想念的东西,但我无法固定它。
也许这不是我遇到的无礼问题,但我的一般 Typescript 设置应该不同(所以我不必在我的测试文件中使用 require('../app ... '))?
原来这应该很简单: 我必须将 Chutzpah 配置中的 AMDBaseUrl 设置为 "app/js",并删除 AMDAppDirectory 属性。 不敢相信我以前没有尝试过。
我的chutzpah.json:
{
"Framework": "qunit",
"TestHarnessReferenceMode": "AMD",
"TestHarnessLocationMode": "SettingsFileAdjacent",
"TypeScriptModuleKind": "AMD",
"Tests": [ { "Path": "tests", "Includes": [ "*Tests.ts" ] } ],
"AMDBasePath": "app/js",
"References": [
{ "Path": "app/libs/js/jquery.js", "IsTestFrameworkFile": true },
{ "Path": "app/libs/js/kendo.ui.core.min.js", "IsTestFrameworkFile": true },
{ "Path": "app/libs/js/mediaelement-and-player.js", "IsTestFrameworkFile": true },
{ "Path": "app/libs/require.js", "IsTestFrameworkFile": true },
{ "Path": "app/libs/js/SCORM_API_wrapper.js" },
{ "Path": "require.d.ts", "IncludeInTestHarness": false },
{ "Path": "qunit.d.ts", "IncludeInTestHarness": false },
{ "Path": "tests", "IncludeInTestHarness": false, "Excludes": ["*.html"] },
{ "Path": "app/js", "IncludeInTestHarness": false }
],
"EnableCodeCoverage ": "true",
"CodeCoverageIncludes": [
"*app/js/*"
],
"CodeCoverageExcludes": [
"app/libs/*",
"tests/*"
]
}