我有一个用TypeScript编写的类:
import * as uuid from "uuid";
export class IdGenerator {
getId() {
return uuid.v4();
}
}
这依赖于我用npm安装的uuid包。
我使用webpack将其与使用TypeScript编写的其他代码一起部署到浏览器中。依赖性得到了解决,一切都很好。
我想测试这个类,所以我编写了以下测试:
import { IdGenerator } from "../src/IdGenerator";
describe("An id generator", () => {
const idGenerator = new IdGenerator();
it("generates an id", () => {
expect(idGenerator.getId()).not.toBeNull();
});
});
我使用Chutzpah进行以下配置:
{
"Framework": "jasmine",
"TestHarnessReferenceMode": "AMD",
"TestHarnessLocationMode": "SettingsFileAdjacent",
"EnableTestFileBatching": true,
"References": [
{
"Path": "node_modules/requirejs/require.js",
"IsTestFrameworkFile": true
}
],
"Compile": {
"Mode": "External",
"Extensions": [ ".ts" ],
"ExtensionsWithNoOutput": [ ".d.ts" ]
},
"Tests": [
{ "Path": "Components/test" }
]
}
尝试使用Chutzpah进行测试时,出现以下错误:
/node_modules/requirejs/require.js中的未处理异常[...] [...]“uuid”的脚本错误,需要:Components / src / IdGenerator
所以我在chutzpah.json中添加了对路径的引用,它解除了这个错误,但是为uuid的一个依赖项引发了一个错误。我添加了依赖项的引用,然后获得了进一步的依赖项错误,依此类推。
理想情况下,我希望所有依赖项的解析方式与部署到浏览器的bundle一样。
我是否应该放弃尝试以这种方式测试具有包依赖性的TypeScript文件的想法,而是考虑使用依赖注入并模拟测试的TypeScript文件中的包依赖项?也许还为捆绑创建单独的JavaScript测试?或者是否有另一种方法可以使用包依赖性来测试我的TypeScript代码?
答案 0 :(得分:0)
看起来它不起作用,因为requireJS和Node以这种方式不兼容。见here。从那个答案:
无法在客户端(浏览器)上使用RequireJS访问node_modules.
中的文件node_modules
下的文件必须先复制到可访问的位置(在客户端可以访问它们之前的public
文件夹下)。文档说RequireJS can access Node modules,但这仅适用于服务器端 JavaScript(当您想在Node中使用RequireJS样式的模块语法时)。
要在客户端应用中使用config
模块,您必须先将其转换为与RequireJS兼容的模块,然后将其复制到public
下。本文{{3并且包含最终修复了我对RequireJS + Node的理解的引用:
要在浏览器上使用节点模块,您需要构建 工具。这可能会打扰你。如果这是一个交易破坏者,那么所有人 意味着继续浪费你的生命复制和粘贴代码和 安排你的脚本标签。