Wallabyjs - установка noEmitOnError в true приводит к ошибкам - PullRequest
0 голосов
/ 19 октября 2018

Я использую Wallabyjs с Visual Studio, Angular 5, Webpack и Typescript.После того, как это произошло несколько раз, этот код был перенесен в репозиторий, хотя в спецификационных файлах была ошибка компиляции, я хотел активировать noEmitOnError с

compilerOptions.noEmitOnError = true;
compilerOptions.useStandardDefaults = true;

в моем файле конфигурации wallaby.js.К сожалению, сейчас я получаю три ошибки и не могу от них избавиться.(Без установки значения noEmitOnError в true все работает отлично!) Ошибки:

Postprocessor run failure: TypeScript compiler errors:
  - Error C:/Users/[NAME]/AppData/Local/Temp/.wallaby/projects/.../somefile.ts: Cannot find module '@angular/platform-browser'.
  - Error: Cannot find type definition file for 'jasmine'.
  - Error: Cannot find type definition file for 'node'.

Файл, на который ссылается первая ошибка, - это обычный файл .ts с уменьшенным содержимым:

import { SafeUrl } from "@angular/platform-browser";

Если я удалю эту строку, ошибка исчезнет.И так как «нормальная» компиляция машинописи работает, то, пожалуй, излишне говорить, но в папке node_modules / @ types есть две папки для jasmine и node.

Есть идеи?Я искал в Интернете, но не нашел много. На одной странице Я нашел что-то вроде этого

Promise.all([System.import('@angular/core/testing'), System.import('@angular/platform-browser-dynamic/testing')])
        .then(function (results) {
          var testing = results[0];
          var browser = results[1];
          testing.setBaseTestProviders(

, но я понятия не имею, как сделать что-то подобное в моей установке с веб-пакетом и машинописью ...

Как это может помочь, вот моя конфигурация wallaby:

var wallabyWebpack = require('wallaby-webpack');
var path = require('path');

var compilerOptions = Object.assign(
  require('./tsconfig.json').compilerOptions,
  require('./src/tsconfig.spec.json').compilerOptions);

compilerOptions.module = 'CommonJs';
compilerOptions.noEmitOnError = true; // you may skip it if it's already set in tsconfig
compilerOptions.useStandardDefaults = true;

module.exports = function (wallaby) {

  var webpackPostprocessor = wallabyWebpack({
    entryPatterns: [
      'src/wallabyTest.js',
      'src/**/*spec.js'
    ],

    module: {
      rules: [
        { test: /\.css$/, loader: ['raw-loader', 'css-loader'] },
        { test: /\.html$/, loader: 'raw-loader' },
        { test: /\.ts$/, loader: '@ngtools/webpack', include: /node_modules/, query: { tsConfigPath: 'tsconfig.json' } },
        { test: /\.js$/, loader: 'angular2-template-loader', exclude: /node_modules/ },
        { test: /\.json$/, loader: 'json-loader' },
        { test: /\.styl$/, loaders: ['raw-loader', 'stylus-loader'] },
        { test: /\.less$/, loaders: ['raw-loader', 'less-loader'] },
        { test: /\.scss$|\.sass$/, loaders: ['raw-loader', 'sass-loader'] },
        { test: /\.(jpg|png)$/, loader: 'url-loader?limit=128000' }
      ]
    },

    resolve: {
      extensions: ['.js', '.ts'],
      modules: [
        path.join(wallaby.projectCacheDir, 'src/app'),
        path.join(wallaby.projectCacheDir, 'src'),
        'node_modules'
      ]
    },
    node: {
      fs: 'empty',
      net: 'empty',
      tls: 'empty',
      dns: 'empty'
    }
  });

  return {
    files: [
      { pattern: 'src/**/*.+(ts|css|less|scss|sass|styl|html|json|svg)', load: false },
      { pattern: 'mocks/**/*.ts', load: false },
      { pattern: 'src/**/*.d.ts', ignore: true },
      { pattern: 'src/**/*spec.ts', ignore: true },
      '!src/test.ts',
      '!src/main.ts'
    ],

    tests: [
      { pattern: 'src/**/*spec.ts', load: false },
      { pattern: 'src/**/*e2e-spec.ts', ignore: true }
    ],

    testFramework: 'jasmine',

    compilers: {
      '**/*.ts': wallaby.compilers.typeScript(compilerOptions)
    },

    middleware: function (app, express) {
      var path = require('path');
      app.use('/favicon.ico', express.static(path.join(__dirname, 'src/favicon.ico')));
      app.use('/assets', express.static(path.join(__dirname, 'src/assets')));
    },

    env: {
      kind: 'chrome'
    },

    postprocessor: webpackPostprocessor,

    setup: function () {
      window.__moduleBundler.loadTests();
    },

    debug: false
  };
};

И мой tsconfig.json выглядит так:

{
    "compileOnSave": false,
    "compilerOptions": {
        "preserveSymlinks": true,
        "outDir": "./dist/out-tsc",
        "sourceMap": true,
        "declaration": false,
        "moduleResolution": "node",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "target": "es5",
        "typeRoots": [
            "node_modules/@types"
        ],

        "plugins": [
            {
                "name": "tslint-language-service",
                "defaultSeverity": "error",
                "ignoreDefinitionFiles": true
            }
        ],
        "lib": [
            "es2017",
            "dom"
        ]
    }
}

Большое спасибо за любую помощь!Приветствия

...