我似乎无法通过我的摩卡测试为ts-transform-keys设置自定义转换器。
我正在使用摩卡6.1.4
ts节点8.3.0 https://www.npmjs.com/package/ts-node
ts-trasnformer键0.3.5 https://github.com/kimamula/ts-transformer-keys
打字稿1.5.7 https://github.com/cevek/ttypescript
ts-node文档说,您不能仅通过编程方式在CLI上设置自定义转换器。所以我正在尝试使用ttypescript来克服该限制。
我尝试了以下操作...
注意:test.ts包含以下内容
import { keys } from 'ts-transformer-keys';
describe("xyz"), () => {
it("123", (done) => {
keys<CustomInterface>();
});
});
尝试1)-使用环境变量设置ts节点
TS_NODE_COMPILER="ttypescript" mocha test/test.ts --require ts-node/register
然后我在test / tsconfig.json中具有以下内容
{
"compilerOptions": {
"plugins": [
{ "transform": "ts-transformer-keys/transformer" }
]
}
}
这导致Uncaught TypeError: ts_transformer_keys_1.keys is not a function
,它指示在编译时未使用自定义转换器。
尝试2)遵循ts-transformer-keys的打字稿API示例
我添加了带有以下内容的mocha.opts文件
--file test/transformer-config.js
和带有以下内容的translator-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'));
}
然后我像这样mocha test/test.ts --require ts-node/register
调用它>
这将导致以下错误
/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) ...
感觉像是在尝试1中,从未在tsconfig.json中调用设置自定义转换器的代码,或者如果它被调用,则代码无提示地失败。
感觉就像在尝试2中,我正在创建打字稿程序的新实例,然后由于某种原因而失败。而且即使成功了,我也不确定这是否是配置事情的正确方法,因为ts.createProgram希望获得将要传输的文件的RootNames列表。
也许我的整个方法是错误的。
我真正想要的是一种在我的摩卡测试中可以验证预期结果类型是否为方法返回值的方式。而且我希望能够做到这一点而无需花太多的源代码。
我似乎无法通过我的摩卡测试为ts-transform-keys设置自定义转换器。我正在使用摩卡6.1.4 ts节点8.3.0 https://www.npmjs.com/package/ts-node ts-trasnformer-keys 0.3.5 https:// ...
您应该能够定义所需的模块(请参见下文)并以编程方式运行ts-node。这样,您可以安全地使用任何客户变压器。