Javascript 如何使用ts_transformer_键正确配置mocha测试?
我似乎无法通过mocha测试为ts转换键设置自定义转换器 我用的是摩卡咖啡6.1.4 ts节点8.3.0 ts变速箱前钥匙0.3.5 t类型脚本1.5.7 ts节点文档说明不能在CLI上设置自定义转换器,只能通过编程方式设置。所以我尝试使用ttypescript来绕过这个限制 我试过以下方法 注:test.ts包含以下内容Javascript 如何使用ts_transformer_键正确配置mocha测试?,javascript,typescript,mocha.js,ts-node,Javascript,Typescript,Mocha.js,Ts Node,我似乎无法通过mocha测试为ts转换键设置自定义转换器 我用的是摩卡咖啡6.1.4 ts节点8.3.0 ts变速箱前钥匙0.3.5 t类型脚本1.5.7 ts节点文档说明不能在CLI上设置自定义转换器,只能通过编程方式设置。所以我尝试使用ttypescript来绕过这个限制 我试过以下方法 注:test.ts包含以下内容 import { keys } from 'ts-transformer-keys'; describe("xyz"), () => { it("123", (d
import { keys } from 'ts-transformer-keys';
describe("xyz"), () => {
it("123", (done) => {
keys<CustomInterface>();
});
});
这将导致未捕获类型错误:ts_transformer_keys_1.keys不是一个函数
,它表明在编译时未使用自定义转换器
尝试2)遵循ts transformer键的typescript API示例
我添加了一个mocha.opts文件,其中包含以下内容
--file test/transformer-config.js
const ts = require('typescript');
const keysTransformer = require('ts-transformer-keys/transformer').default;
const program = ts.createProgram(['test/test.ts'], {
strict: true,
noEmitOnError: true,
target: ts.ScriptTarget.ES5
});
const transformers = {
before: [keysTransformer(program)],
after: []
};
const { emitSkipped, diagnostics } = program.emit(undefined, undefined, undefined, false, transformers);
if (emitSkipped) {
throw new Error(diagnostics.map(diagnostic => diagnostic.messageText).join('\n'));
}
以及一个transformer-config.js文件,其中包含以下内容
--file test/transformer-config.js
const ts = require('typescript');
const keysTransformer = require('ts-transformer-keys/transformer').default;
const program = ts.createProgram(['test/test.ts'], {
strict: true,
noEmitOnError: true,
target: ts.ScriptTarget.ES5
});
const transformers = {
before: [keysTransformer(program)],
after: []
};
const { emitSkipped, diagnostics } = program.emit(undefined, undefined, undefined, false, transformers);
if (emitSkipped) {
throw new Error(diagnostics.map(diagnostic => diagnostic.messageText).join('\n'));
}
然后我像这样调用它mochatest/test.ts--需要ts节点/寄存器
这将导致以下错误
/Users/jjohnson/Documents/OCS/hmp/git/hmp-server/server/test/ttypescript-register.js:17
throw new Error(diagnostics.map(diagnostic => diagnostic.messageText).join('\n'));
^
Error: [object Object]
[object Object]
[object Object]
at Object.<anonymous> (/Users/jjohnson/Documents/OCS/hmp/git/hmp-server/server/test/ttypescript-register.js:17:9)
at Module._compile (internal/modules/cjs/loader.js:777:30)
...
/Users/jjohnson/Documents/OCS/hmp/git/hmp server/server/test/ttypescript register.js:17
抛出新错误(diagnostics.map(diagnostics=>diagnostic.messageText.join('\n'));
^
错误:[对象]
[对象]
[对象]
反对。(/Users/jjohnson/Documents/OCS/hmp/git/hmp server/server/test/ttypescript register.js:17:9)
at模块编译(内部/modules/cjs/loader.js:777:30)
...
感觉就像在尝试1中,它从未调用在tsconfig.json中设置自定义转换器的代码,或者如果它被调用,则代码会无声地失败
感觉就像在第二次尝试中,我创建了一个typescript程序的新实例,但由于某种原因失败了。即使成功了,我也不确定这是否是正确的配置方式,因为ts.createProgram需要一个它将传输的文件的根名列表
也许我的整个方法都错了
我真正想要的是,在我的mocha测试中,我可以验证预期的结果类型是该方法返回的结果类型。我希望能够在不涉及太多源代码的情况下实现这一点。您应该能够定义所需的模块(见下文)并以编程方式运行ts节点。这样,您就可以安全地使用任何客户变压器 //tsnode.js
const transformer = require('ts-transformer-keys/transformer').default;
require("ts-node").register({
transformers: program => ({
before: [
transformer(program)
]
})
});
然后,您可以运行摩卡与需要
mocha --require './tsnode.js' --watch-extensions ts,tsx "test/**/*.{ts,tsx}
您可以告诉
ts节点
在tsconfig.json
中使用哪个编译器。这在ts节点
中介绍。如果您使用的是转换器,那么您也可以使用ttypescript
编译器。您只需添加以下内容:
"ts-node": {
"compiler": "ttypescript"
}