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