Jest препроцессор для Typescript / ES6

typescript ecmascript-6 jestjs

1881 просмотра

3 ответа

2225 Репутация автора

Я пытаюсь проверить класс Typescript, используя Jest. Поскольку мне нужно использовать es6, async/awaitмне нужно сначала скомпилировать класс машинописного текста в es6, а затем в es5 с помощью babel. Что мне нужно добавить в препроцессор, чтобы добиться этого. Мой текущий препроцессор выглядит так:

const tsc = require('typescript');

module.exports = {
    process: function(src, path) {
        if (path.endsWith('.ts') || path.endsWith('.tsx')) {
            return tsc.transpile(
                src,
                {
                    module: tsc.ModuleKind.CommonJS,
                    jsx: tsc.JsxEmit.React
                },
                path,
                []
            );
        }
        return src;
    }
};

Нужно ли добавлять target: tsc.ScriptTarget.ES6? Когда я это делаю, я получаю сообщение unexpected identifier =об ошибке в обработанном коде, которое похоже на версию моего .tsкласса. Из этого я понял, что мой препроцессор компилирует данные в es6, а мой es6 не переносится в es5. Также есть ли готовый препроцессор, который может это сделать?

Автор: Nahush Farkande Источник Размещён: 18.07.2016 11:09

Ответы (3)


3 плюса

6934 Репутация автора

Я бы рекомендовал использовать https://www.npmjs.com/package/ts-jest, который является гораздо более чистым решением. Препроцессор, который делает всю работу за вас ...

Автор: reflog Размещён: 15.09.2016 06:29

4 плюса

450 Репутация автора

Если вы ищете пользовательскую конфигурацию, это может быть ваш ответ: https://stackoverflow.com/a/40070453/4909970

Однако по моему опыту ts-jest работает отлично. Просто убедитесь , что вы указали шутя параметры TS-шутку "target": "ES6"в __TS_CONFIG__ или просто добавить текущую машинопись конфигурации.

Вы package.jsonбудете выглядеть примерно так:

"jest": {
    "scriptPreprocessor": "<rootDir>/node_modules/ts-jest/preprocessor.js",
    "globals": {
        "__TS_CONFIG__": "tsconfig.json"
    }
}
Автор: pavloko Размещён: 05.11.2016 02:05

0 плюса

2225 Репутация автора

Решение

Решение этой проблемы, которую я сейчас использую

const tsc = require('typescript');

const babel = require('babel-core');
const jestPreset = require('babel-preset-jest');
const es2015 = require('babel-preset-es2015');
const stage3 = require('babel-preset-stage-3');

module.exports = {
    process: function (src, path) {
        if (path.endsWith('.ts') || path.endsWith('.tsx')) {
            var es6Code = tsc.transpile(
                src,
                {
                    target: tsc.ScriptTarget.ES6,
                    module: tsc.ModuleKind.CommonJS,
                    jsx: tsc.JsxEmit.React
                },
                path,
                []
            );
            return babel.transform(es6Code, {
                auxiliaryCommentBefore: ' istanbul ignore next ',
                    presets: [jestPreset, es2015, stage3],
                retainLines: true
            }).code;
        }
        return src;
    }
};

Итак, что я делаю здесь, так это то, что я беру переданный код, сгенерированный компилятором машинописи, и передаю его через babel, который, в свою очередь, преобразует мой код из es6 в es5.

Автор: Nahush Farkande Размещён: 07.11.2016 04:57
Вопросы из категории :
32x32