Как правильно настроить тесты мокко с помощью ts_transformer_keys? - PullRequest
0 голосов
/ 07 октября 2019

Я не могу установить пользовательский преобразователь для ключей ts-transform с моими тестами mocha.

Я использую mocha 6.1.4

ts-node 8.3.0https://www.npmjs.com/package/ts-node

ts-trasnformer-keys 0.3.5 https://github.com/kimamula/ts-transformer-keys

ttypescript 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, который указывает, что пользовательский преобразователь не был 't используется во время компиляции.

Попытка 2) Следуя примеру API машинописного текста из ts-transformer-keys

Я добавил файл 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'));
        ^
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 I 'я создаю новый экземпляр программы машинописного текста, а затем по какой-то причине происходит сбой. И даже если это удастся, я не уверен, что это правильный способ настройки, так как ts.createProgram хочет получить список RootNames для файлов, которые он будет передавать.

Возможно, весь мой подход неверен.

Все, что мне действительно нужно, - это способ, чтобы в моих тестах мокко я мог проверить, что ожидаемый тип результата - это то, что возвращал метод. И я хотел бы иметь возможность сделать это без касания слишком большого количества исходного кода.

...