Ошибка тестирования файлов Typescript с помощью плагина Open WC Karma-ESM - PullRequest
2 голосов
/ 28 октября 2019

Я запустил тест как sudo, т.е. sudo npm run test

.... и это сработало. Пойди разберись! Кто-нибудь хочет рискнуть предположить, почему это будет иметь место?

Я использую плагин karma-esm для открытых веб-компонентов для запуска тестов в моем монорепо. Но я получаю сообщение об ошибке из-за хрома без головы, что есть неожиданный знак «<». Я понимаю, что подобные синтаксические ошибки могут возникать при тестировании файлов машинописи, но я не уверен, как их преодолеть. </p>

Вот мой тестовый скрипт root.json:

"test": "npx karma start --coverage"

Вот мой файл karma.conf.js (в корне репозитория, поэтому базовый путь не определен):

const defaultConfig = require('@open-wc/testing-karma/esm-config');
const merge = require('deepmerge');

module.exports = (config) => {
   config.set(
      merge(defaultConfig(config), {

        // define where your test files are, make sure to set type to module
        files: [
            { pattern: 'packages/*.tests.ts', type: 'module' },
        ],

        plugins: [
            // load plugin
            require.resolve('@open-wc/karma-esm'),

            // fallback: resolve any karma- plugins
            'karma-*',
        ],

        frameworks: ['esm'],

        esm: {
            babel: false,
            nodeResolve: true,
            fileExtensions: ['.ts', '.scss'],
            customBabelConfig: {
                plugins: [
                    ['@babel/plugin-proposal-decorators', { legacy: true }],
                    ['@babel/plugin-proposal-class-properties', { loose: true }],
                    ['css-modules-transform', { extensions: ['.css', '.scss', '.less'] }],
                ],
                presets: [
                    '@babel/preset-typescript',
                ],
            },
        },

        coverageIstanbulReporter: {
            thresholds: {
                global: {
                    statements: 90,
                    lines: 90,
                    branches: 90,
                    functions: 90,
                },
            },
        },
        captureTimeout: 60000,
        browserDisconnectTolerance: 3, 
        browserDisconnectTimeout : 60000,
        browserNoActivityTimeout : 60000,

    }),
);

return config;
};

Они довольно близки к рекомендуемой конфигурации, за исключением некоторых порогов покрытия. И вот вывод команды:

START:
28 10 2019 16:40:50.262:WARN [filelist]: Pattern 
"/Users/ppepperSandbox/Documents/workspace/test-monorepo/__snapshots__/**/*.md" does not 
match any file.
28 10 2019 16:40:50.283:INFO [karma-server]: Karma v4.1.0 server started at 
http://0.0.0.0:9876/
28 10 2019 16:40:50.283:INFO [launcher]: Launching browsers ChromeHeadlessNoSandbox with 
concurrency unlimited
28 10 2019 16:40:50.286:INFO [launcher]: Starting browser ChromeHeadless
28 10 2019 16:40:50.723:INFO [HeadlessChrome 78.0.3904 (Mac OS X 10.14.6)]: Connected on 
socket fmkN7XNEGqz3pMNNAAAA with id 92870419
HeadlessChrome 78.0.3904 (Mac OS X 10.14.6) ERROR
Uncaught SyntaxError: Unexpected token '<'
at node_modules/source-map-support/browser-source-map-support.js:1:1

SyntaxError: Unexpected token '<'HeadlessChrome 78.0.3904 (Mac OS X 10.14.6) ERROR
Uncaught SyntaxError: Unexpected token '<'
at node_modules/source-map-support/browser-source-map-support.js:1:1

SyntaxError: Unexpected token '<'
Finished in 0.245 secs / 0 secs @ 16:40:50 GMT-0400 (Eastern Daylight Time)

Я знаю, что иногда, если в файле tsconfig.json модуль установлен в качестве форматов ES, может возникнуть синтаксическая ошибка. Но у меня модуль установлен как CommonJS , который, я думал, будет работать. Я правильно не справляюсь с этой проблемой? Кто-нибудь знает? Мой файл tsconfig.json находится ниже:

{
    "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "declaration": true,
    "declarationMap": true,
    "sourceMap": true,
    "removeComments": true,
    "strict": true,
    "esModuleInterop": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "baseUrl": "."
  },
    "include": [
    "packages/**/src/**/*.ts",
    "declarations.d.ts"
  ],
  "exclude": [
    "node_modules"
  ]
}

Спасибо!

1 Ответ

2 голосов
/ 01 ноября 2019

Я запустил тест как sudo, то есть sudo npm run test

.... и это сработало. Похоже, использование sudo с npm - очень и очень плохая идея. Я попытался сбросить разрешения для этих файлов, чтобы все стало лучше, но это не сработало. Что мне не хватает?

sudo chown -R $(whoami) /usr/local/lib/node_modules
sudo chown -R $(whoami) /usr/local/bin
sudo chown -R $(whoami) /usr/local/share
...