Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用ts_transformer_键正确配置mocha测试?_Javascript_Typescript_Mocha.js_Ts Node - Fatal编程技术网

Javascript 如何使用ts_transformer_键正确配置mocha测试?

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

我似乎无法通过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", (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"
  }