jsf*_*jsf 5 unit-testing build node.js typescript tsc
在我当前的 TypeScript 项目中,我有以下文件结构:
\n\nproject\n\xe2\x94\x9c\xe2\x94\x80app\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80index.html\n\xe2\x94\x9c\xe2\x94\x80test\n\xe2\x94\x94\xe2\x94\x80src\n \xe2\x94\x9c\xe2\x94\x80app\n \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80tsconfig.json\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80app.ts\n \xe2\x94\x9c\xe2\x94\x80lib\n \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80lib.ts\n \xe2\x94\x94\xe2\x94\x80test\n \xe2\x94\x9c\xe2\x94\x80tsconfig.json\n \xe2\x94\x94\xe2\x94\x80test.ts\nRun Code Online (Sandbox Code Playgroud)\n\n我想要实现的是,在编译该项目时,app生成test的文件结构如下所示:
project\n\xe2\x94\x9c\xe2\x94\x80app\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80index.html\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80app.js\n\xe2\x94\x9c\xe2\x94\x80test\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80lib\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80lib.js\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80test.js\n\xe2\x94\x94\xe2\x94\x80src\n \xe2\x94\x94\xe2\x94\x80...\nRun Code Online (Sandbox Code Playgroud)\n\n或这个:
\n\nproject\n\xe2\x94\x9c\xe2\x94\x80app\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80index.html\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80app.js\n\xe2\x94\x9c\xe2\x94\x80test\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80lib.js\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80test.js\n\xe2\x94\x94\xe2\x94\x80src\n \xe2\x94\x94\xe2\x94\x80...\nRun Code Online (Sandbox Code Playgroud)\n\n我有一个位于 lib 目录中的库。它由 app.ts 使用,然后在网页上使用。测试位于测试目录中。我实际得到的是:
\n\nproject\n\xe2\x94\x9c\xe2\x94\x80app\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80index.html\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80app.js\n\xe2\x94\x9c\xe2\x94\x80test\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80lib\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80lib.js\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80test\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80test.js\n\xe2\x94\x94\xe2\x94\x80src\n \xe2\x94\x94\xe2\x94\x80...\nRun Code Online (Sandbox Code Playgroud)\n\n注意额外的test- 目录。
-文件src/test/tsconfig.json如下所示:
{\n "compileOnSave": true,\n "compilerOptions": {\n "target": "es2016",\n "lib": [\n "dom",\n "es2016"\n ],\n "outDir": "../../test",\n "noImplicitAny": true,\n "noImplicitThis": true,\n "noImplicitReturns": true,\n "module": "commonjs"\n },\n "files": [\n "test.ts"\n ]\n}\nRun Code Online (Sandbox Code Playgroud)\n\n因为我想使用 node.js 在我的机器上执行这些测试,所以我必须选择commonjs作为模块系统。这不会像amd-module 系统那样合并所有 TypeScript 模块。据我了解,它tsc搜索所有涉及模块的第一个公共父目录,并将其作为输出的基目录。该公共目录就是src为什么输出目录中存在额外级别的目录的原因。
所以我的问题是:\n如何告诉 TypeScript 编译器用作src/test输出的根目录,以便将其test.js放入test/test.js而不是放入test/test/test.js?
设置"rootDir": "./"不起作用,因为编译器会输出错误:
error TS6059: File \'[...]/lib/lib.ts\' is not under \'rootDir\' \'[...]/src/test/\'. \'rootDir\' is expected to contain all source files.\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1291 次 |
| 最近记录: |