为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 ts_transformer_keys 正确配置 mocha 测试?

如何使用 ts_transformer_keys 正确配置 mocha 测试?

慕仙森 2021-11-12 15:29:21
我似乎无法使用 mocha 测试为 ts-transform-keys 设置自定义转换器。我正在使用摩卡咖啡 6.1.4ts 节点 8.3.0 https://www.npmjs.com/package/ts-nodets-trasnformer-keys 0.3.5 https://github.com/kimamula/ts-transformer-keysttypescript 1.5.7 https://github.com/cevek/ttypescriptts-node 文档说你不能在 CLI 上设置自定义转换器,只能以编程方式。所以我试图使用 ttypescript 来绕过这个限制。我试过以下...注意:test.ts 包含以下内容import { keys } from 'ts-transformer-keys';describe("xyz"), () => {  it("123", (done) => {     keys<CustomInterface>();  });});尝试 1) - 使用环境变量设置 ts-nodeTS_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 中的 typescript API 示例我添加了一个 mocha.opts 文件,内容如下--file test/transformer-config.js和一个具有以下内容的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'));}然后我像这样调用它 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'));        ^感觉就像在尝试 1 中,它从未调用过在 tsconfig.json 中设置自定义转换器的代码,或者如果它被调用,代码就会默默地失败。感觉就像在尝试 2 中,我正在创建打字稿程序的新实例,然后由于某种原因失败了。即使它成功了,我也不确定这是配置事物的正确方法,因为 ts.createProgram 想要它要转译的文件的 RootNames 列表。也许我的整个方法都是错误的。我真正想要的是一种方法,在我的 mocha 测试中,我可以验证预期的结果类型是方法返回的类型。我希望能够在不涉及太多源代码的情况下做到这一点。
查看完整描述

2 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

您应该能够定义所需的模块(见下文)并以编程方式运行 ts-node。这样,您就可以安全地使用任何客户变压器。


// tsnode.js


const transformer = require('ts-transformer-keys/transformer').default;

require("ts-node").register({

  transformers: program => ({

    before: [

      transformer(program)

    ]

  })

});


然后你可以用 require 运行 mocha


mocha --require './tsnode.js' --watch-extensions ts,tsx "test/**/*.{ts,tsx}


查看完整回答
反对 回复 2021-11-12
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

您可以告诉ts-node在tsconfig.json. 这在ts-node docs 中有介绍。如果您使用变压器,大概您也在使用ttypescript编译器。你只需要添加这个:


  "ts-node": {

    "compiler": "ttypescript"

  }


查看完整回答
反对 回复 2021-11-12
  • 2 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信