我正在尝试使用Intern设置Node.js + TypeScript项目进行测试。当我使用“commonjs”(我为正常构建做)编译项目时,一切正常;编译“amd”时,TypeScript同样很高兴,这是Intern所要求的。但是,当使用intern-client
传递测试时,它会抱怨一些事情:
首先,从“index.ts”文件(所谓的“桶”模块)导入不起作用。我的设置是这样的(同一目录中的所有内容):
// index.ts
export { x } from './x'
// x.ts
export function x() {}
// x.test.ts
import { x } from '.' // "Error: Failed to load module ..."
实际上,生成的JavaScript代码(对于x.test.ts
)看起来像这样:
define(["require", "exports", "."], function (...) { ... })
而且我不确定AMD知道如何处理"."
。
第二个问题发生在相同的情况下(TypeScript编译愉快,但intern-client
抱怨)。总之,我在执行时遇到错误:
import jsdom = require('jsdom')
我需要转换为:
const jsdom = require('jsdom')
让实习生能够处理它。
以下是我用来编译测试的tsconfig.json
文件:
{
"compilerOptions": {
"target": "es6",
"module": "amd",
"moduleResolution": "node",
"sourceMap": true,
"rootDir": "src",
"outDir": "build/tests",
"noImplicitAny": true,
"suppressImplicitAnyIndexErrors": true
}
}
这是我的intern.js
配置文件,如果它有帮助:
define({
suites: ['build/tests/**/*.test.js'],
excludeInstrumentation: true,
filterErrorStack: true
})
修改(2017-05-03)
为帮助理解该问题,以下是项目目录树的摘录:
build
tests // The compiled tests will end up here
src
core
utils
x.ts
x.test.ts
// Other files, each containing a function that I would like to unit-test...
intern.js
package.json
tsconfig.json
...
答案 0 :(得分:0)
关于第一个问题,AMD正在处理类似于'。'的导入。与Node不同。虽然他们都会映射出来。'对于包,Node使用默认模块名index.js
,而AMD使用main.js
。为了在AMD加载器中工作,您需要首先为'。'定义一个包,然后告诉AMD加载器该包使用什么默认模块。根据您的项目布局,您可以像这样配置Intern:
loaderOptions: {
map: {
// When a module in src/ references 'src/utils', redirect
// it to 'utils'
'src': {
'src/utils': 'utils'
}
},
packages: [
// Define a package 'utils' with files in 'src/utils' that defaults
// to the module index.js
{ name: 'utils', location: 'src/utils', main: 'index.js' }
]
}
关于第二个问题,目前还不清楚问题究竟是什么。 ImportScript语句将被TypeScript转换为define
依赖项,因此Intern永远不会看到它们。