jeffling / wallaby-webpack

webpack preprocessor for wallabyjs
25 stars 8 forks source link

Wallaby not working with node express http module #26

Closed pearljamik closed 7 years ago

pearljamik commented 7 years ago

https://stackoverflow.com/questions/45674531/webpack-bundle-that-overwrites-http-module-and-prototype-is-not-defined

ArtemGovorov commented 7 years ago

It looks like you're testing a node.js app, not a browser app/client side code, because you are importing node's http module (how is node's http module supposed to work in a browser?).

So if it's node backend that you're testing, then you don't need to use webpack at all (node.js supports CommonJs natively, and wallaby-webpack doesn't support node environment), so you may just use the simple node configuration from here: https://wallabyjs.com/docs/integration/node.html

If I missed something, and it's a browser app that you're testing, then please share a sample repository where we could reproduce the issue. Please also include your existing webpack config (so that the sample could be built and we could run it) and karma config (if you have it).

pearljamik commented 7 years ago

I am testing an angular 2nd application that runs in a browser. So it is frontend. I am using webpack to bundle the application.

wallaby.js

const webpack = require('webpack');
const helpers = require('./config/helpers');
var http = require('http');
var wallabyWebpack = require('wallaby-webpack');
var path = require('path');

const CopyWebpackPlugin = require('copy-webpack-plugin');
const GenerateJsConfigPlugin = require('./config/plugins/GenerateJsConfigPlugin');
const VersionFile = require('webpack-version-file-plugin');
const DefinePlugin = require('webpack/lib/DefinePlugin');

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

const ENV = 'test';
module.exports = function (wallaby) {

  var webpackPostprocessor = wallabyWebpack({

    node: {
      global: true,
      fs: 'empty',
      crypto: 'empty',
      module: false,
      clearImmediate: false,
      setImmediate: false
    },

    plugins: [
      new webpack.ProvidePlugin({
        i18next: 'i18next',
        i18nextBrowserLanguageDetector: 'i18next-browser-languagedetector',
        simulant: 'simulant'
      }),

      new DefinePlugin({
        'ENV': JSON.stringify(ENV),
        'HMR': false,
        'PLATFORM_SPECIFIC_VARIABLES': JSON.stringify(GenerateJsConfigPlugin.getConfig('develop', false, true)),
        'globalConfig': {
          platform: {},
          metadata: {
            APP_NAME: '"AWARE"',
            PREDEFINED_ICONS: ['"a.jpg"', '"b.jpg"']
          }
        },
        'process.env': {
          'ENV': JSON.stringify(ENV),
          'NODE_ENV': JSON.stringify(ENV),
          'HMR': false
        }
      }),

      new webpack.ContextReplacementPlugin(
        // The (\\|\/) piece accounts for path separators in *nix and Windows
        /angular(\\|\/)core(\\|\/)@angular/,
        helpers.root('../src')
      )
    ],

    entryPatterns: [
      'src/wallabyTest.js',
      'src/**/*spec.js'
    ],

    module: {
      loaders: [
        {test: /\.css$/, loader: 'raw-loader'},
        {test: /\.html$/, loader: 'raw-loader'},
        {test: /\.ts$/, loader: '@ngtools/webpack', include: /node_modules/, query: {tsConfigPath: 'tsconfig.json'}},
        {
          test: /\.js$/,
          loader: 'angular2-template-loader',
          include: /node_modules/,
          query: {tsConfigPath: 'tsconfig.json'}
        },
        {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'),
        path.join(wallaby.projectCacheDir, 'node_modules')
      ]

    }
  });

  console.log(wallaby.projectCacheDir);

  return {
    files: [
      {pattern: 'src/**/*.ts', load: false},
      {pattern: 'src/**/*.d.ts', ignore: true},
      {pattern: 'src/**/*.css', load: false},
      {pattern: 'src/**/*.less', load: false},
      {pattern: 'src/**/*.scss', load: false},
      {pattern: 'src/**/*.sass', load: false},
      {pattern: 'src/**/*.styl', load: false},
      {pattern: 'src/**/*.html', load: false},
      {pattern: 'src/**/*.json', load: false},
      {pattern: 'src/**/*spec.ts', ignore: true},
      {pattern: './node_modules/dragula/dist/dragula.min.css', load: true},
      {pattern: './node_modules/flatpickr/dist/themes/dark.css', load: true},
      {pattern: './src/locales/**/*.*', load: true},
      {pattern: './node_modules/@commandcentral/cobalt-table/dist/styles/cobalt-main-theme.css', load: true},
      {pattern: './node_modules/@commandcentral/cobalt-basic/dist/styles/cobalt-main-theme.css', load: true},
      {pattern: './node_modules/@commandcentral/golden-layout/src/css/goldenlayout-base.css', load: true}
    ],

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

    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: 'electron'
    },

    postprocessor: webpackPostprocessor,

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

    debug: true
  };
};

And karma.config.js

module.exports = function() {
  return {

    // base path that will be used to resolve all patterns (e.g. files, exclude)
    basePath: '../../',

    browserNoActivityTimeout: 500000,

    /*
     * Frameworks to use
     *
     * available frameworks: https://npmjs.org/browse/keyword/karma-adapter
     */
    frameworks: ['jasmine'],

    // list of files to exclude
    exclude: [],

    /*
     * list of files / patterns to load in the browser
     *
     * we are building the test environment in ./spec-bundle.js
     */
    files: [{pattern: './config/karma/spec-bundle.js', watched: false},
      {pattern: './src/assets/**/*.png', watched: false, included: false, served: true},
      {pattern: './src/assets/**/*.svg', watched: false, included: false, served: true}],

    proxies: {
      '/assets': '/base/src/assets',
    },

    /*
     * preprocess matching files before serving them to the browser
     * available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
     */
    preprocessors: {'./config/karma/spec-bundle.js': ['coverage', 'webpack', 'sourcemap']},

    // Webpack please don't spam the console when running in karma!
    webpackServer: {noInfo: true, stats: {chunks: false}},

    /*
     * test results reporter to use
     *
     * possible values: 'dots', 'progress'
     * available reporters: https://npmjs.org/browse/keyword/karma-reporter
     */
    reporters: ['mocha', 'coverage'],

    mochaReporter: {
      ignoreSkipped: process.env.IGNORE_SKIPPED === 'true'
    },

    htmlReporter: {
      outputFile: 'tests/Unit-and-Component-test-report.html',

      // Optional
      pageTitle: 'Inform Unit Tests Report',
      subPageTitle: 'Includes both Unit and Component Tests',
      groupSuites: true,
      useCompactStyle: true,
      useLegacyStyle: true
    },

    // web server port
    port: 9876,

    // enable / disable colors in the output (reporters and logs)
    colors: true,

    // enable / disable watching file and executing tests whenever any file changes
    autoWatch: false,

    /*
     * start these browsers
     * available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
     */
    browsers: [
      'HeadlessChrome'
    ],

    customLaunchers: {
      HeadlessChrome: {
        base: 'Chrome',
        flags: [
          '--headless',
          '--disable-gpu',
          '--remote-debugging-port=9222'
        ]
      }
    },

    /*
     * Continuous Integration mode
     * if true, Karma captures browsers, runs the tests and exits
     */
    singleRun: true
  };
};

let configBase = require('./karma.base');
const helpers = require('../helpers');

module.exports = function (config) {
  const debug = process.env.KARMA_DEBUG;
  let karmaConfig = configBase();
  let webpackConfig = require('../webpack/webpack.test.js');

  if (!debug) {
    karmaConfig.remapIstanbulReporter = {
      reports: {
        lcovonly: 'reports/coverage/lcov/lcov.info',
          html: 'reports/coverage/html'
      }
    };

    karmaConfig.coverageReporter = {
      dir: 'reports/coverage',
        subdir: '.',
        reporters: [
        {type: 'text-summary'},
        {type: 'lcov'}
      ]
    };

    webpackConfig.devtool = false;

    webpackConfig.module.rules.push({
      /**
       * Instruments JS files with Istanbul for subsequent code coverage reporting.
       * Instrument only testing sources.
       *
       * See: https://github.com/deepsweet/istanbul-instrumenter-loader
       */
      enforce: 'post',
      test: /\.(js|ts)$/,
      loader: 'istanbul-instrumenter-loader',
      include: helpers.root('src'),
      exclude: [
        /\.(e2e|spec)\.ts$/,
        /node_modules/
      ]
    });

  }

  karmaConfig.webpack = webpackConfig;
  karmaConfig.logLevel = config.LOG_INFO;
  config.set(karmaConfig);
};
ArtemGovorov commented 7 years ago

Does the karma config work? Please also share:

pearljamik commented 7 years ago

webpack.test

const webpack = require('webpack');
const merge = require('lodash.merge');
const helpers = require('../helpers');

const DefinePlugin = require('webpack/lib/DefinePlugin');
const GenerateJsConfigPlugin = require('../plugins/GenerateJsConfigPlugin');

const ENV = process.env.ENV = process.env.NODE_ENV = 'test';

const commonConfig = require('./webpack.common.js');
const webpackConfig = Object.assign({}, commonConfig);
webpackConfig.devtool = 'inline-source-map';

webpackConfig.plugins = [
  new webpack.ProvidePlugin({
    i18next: 'i18next',
    i18nextBrowserLanguageDetector: 'i18next-browser-languagedetector',
    simulant: 'simulant'
  }),

  /**
   * Plugin: DefinePlugin
   * Description: Define free variables.
   * Useful for having development builds with debug logging or adding global constants.
   *
   * Environment helpers
   *
   * See: https://webpack.github.io/docs/list-of-plugins.html#defineplugin
   */
  // NOTE: when adding more properties make sure you include them in custom-typings.d.ts
  new DefinePlugin({
    'ENV': JSON.stringify(ENV),
    'HMR': false,
    'PLATFORM_SPECIFIC_VARIABLES': JSON.stringify(GenerateJsConfigPlugin.getConfig('develop', false, true)),
    'globalConfig': {
      platform: {},
      metadata: {
        APP_NAME: '"AWARE"',
        PREDEFINED_ICONS: ['"a.jpg"', '"b.jpg"']
      }
    },
    'process.env': {
      'ENV': JSON.stringify(ENV),
      'NODE_ENV': JSON.stringify(ENV),
      'HMR': false
    }
  }),

  new webpack.ContextReplacementPlugin(
    // The (\\|\/) piece accounts for path separators in *nix and Windows
    /angular(\\|\/)core(\\|\/)@angular/,
    helpers.root('../src')
  )
];

module.exports = webpackConfig;

webpack.common.js

const path = require('path');
const webpack = require('webpack');
const helpers = require('../helpers');
const merge = require('lodash.merge');
const constants = require('./constants/common.constants.js');

/*
 * Webpack Plugins
 */
const CopyWebpackPlugin = require('copy-webpack-plugin');
const GenerateJsConfigPlugin = require('../plugins/GenerateJsConfigPlugin');
const VersionFile = require('webpack-version-file-plugin');

/*
 * Webpack configuration
 *
 * See: http://webpack.github.io/docs/configuration.html#cli
 */
module.exports = {
  // Report the first error as a hard error instead of tolerating it.
  bail: true,

  stats: "verbose",
  /*
   * Cache generated modules and chunks to improve performance for multiple incremental builds.
   * This is enabled by default in watch mode.
   * You can pass false to disable it.
   *
   * See: http://webpack.github.io/docs/configuration.html#cache
   * cache: false,
   *
   * The entry point for the bundle
   * Our Angular.js app
   *
   * See: http://webpack.github.io/docs/configuration.html#entry
   */
  entry: {
    'polyfills': './src/polyfills.ts',
    'vendor': './src/vendor.ts',
    'main': './src/main.browser.ts'
  },

  /*
   * Options affecting the resolving of modules.
   *
   * See: http://webpack.github.io/docs/configuration.html#resolve
   */
  resolve: {
    /*
     * An array of extensions that should be used to resolve modules.
     *
     * See: http://webpack.github.io/docs/configuration.html#resolve-extensions
     */
    extensions: ['.ts', '.js'],

    // remove other default values
    modules: [helpers.root('src'), 'node_modules'],

    alias: {
      '@angular/common': helpers.root('node_modules/@angular/common'),
      '@angular/core': helpers.root('node_modules/@angular/core'),
      '@angular/http': helpers.root('node_modules/@angular/http'),
      '@angular/platform-browser': helpers.root('node_modules/@angular/platform-browser'),
      '@angular/testing': helpers.root('node_modules/@angular/core/testing.js'),
      "@commandcentral/common-map": helpers.root('node_modules/@commandcentral/common-map'),
      "@commandcentral/common-web": helpers.root('node_modules/@commandcentral/common-web'),
      "@commandcentral/golden-layout": helpers.root('node_modules/@commandcentral/golden-layout'),
      'angular2-cookie/core': helpers.root('node_modules/angular2-cookie/core.js'),
      'angular2/core': helpers.root('node_modules/@angular/core/index.js'),
      'angular2/http': helpers.root('node_modules/@angular/http/index.js'),
      'angular2/http/testing': helpers.root('node_modules/@angular/http/testing.js'),
      'angular2/testing': helpers.root('node_modules/@angular/core/testing.js'),
      'angular2-color-picker': helpers.root('node_modules/angular2-color-picker/lib/index.js'),
      'angular2-esri-loader': helpers.root('node_modules/angular2-esri-loader'),
      'base64-js': helpers.root('node_modules/base64-js'),
      'buffer': helpers.root('node_modules/buffer'),
      'i18next': helpers.root('node_modules/i18next'),
      'i18next-browser-languagedetector': helpers.root('node_modules/i18next-browser-languagedetector'),
      'ieee754': helpers.root('node_modules/ieee754'),
      'isarray': helpers.root('node_modules/isarray'),
      'ng2-i18next': helpers.root('node_modules/ng2-i18next'),
      'ng2-dragula': helpers.root('node_modules/ng2-dragula'),
      'primeng': helpers.root('node_modules/primeng'),
      'primeui': helpers.root('node_modules/primeui'),
      'rxjs': helpers.root('node_modules/rxjs'),
      'forerunnerdb': helpers.root('node_modules/forerunnerdb/js/builds/core.js'),
      'windows-registry': helpers.root('node_modules/windows-registry')
    }
  },

  /*
   * Options affecting the normal modules.
   *
   * See: http://webpack.github.io/docs/configuration.html#module
   */
  module: {
    /*
     * An array of automatically applied loaders.
     *
     * IMPORTANT: The loaders here are resolved relative to the resource which they are applied to.
     * This means they are not resolved relative to the configuration file.
     *
     * See: http://webpack.github.io/docs/configuration.html#module-loaders
     */
    rules: [

      /*
       * Source map loader support for *.js files
       * Extracts SourceMaps for source files that as added as sourceMappingURL comment.
       *
       * See: https://github.com/webpack/source-map-loader
       */

      {
        test: /\.js$/,
        loader: 'source-map-loader',
        exclude: [
          // these packages have problems with their sourcemaps
          helpers.root('node_modules/rxjs'),
          helpers.root('node_modules/@angular2-material'),
          helpers.root('node_modules/@angular'),
          helpers.root('node_modules/angular2-color-picker'),
          helpers.root('node_modules/ng2-i18next'),
          helpers.root('node_modules/ng2-slim-loading-bar'),
          helpers.root('node_modules/angular2-esri-loader'),
          helpers.root('node_modules/esri-loader'),
          helpers.root('node_modules/@commandcentral/cobalt-basic')
        ],
        enforce: "pre"
      },
      /*
       * Typescript loader support for .ts and Angular 2 async routes via .async.ts
       *
       * See: https://github.com/s-panferov/awesome-typescript-loader
       */
      {
        test: /\.ts$/,
        loader: 'awesome-typescript-loader',
        query: {
          compilerOptions: {
            // Remove TypeScript helpers to be injected
            // below by DefinePlugin
            removeComments: true
          },
          exclude: [/\.(spec|e2e)\.ts$/]
        }
      },
      /*
       * Raw loader support for *.css files
       * Returns file content as string
       *
       * See: https://github.com/webpack/raw-loader
       */
      {
        test: /\.css$/,
        loader: 'raw-loader'
      },

      /*
       * Sass loader support for *.scss files
       */
      {
        test: /\.scss$/,
        use: ['raw-loader', 'sass-loader'], // sass-loader not scss-loader
        exclude: /node_modules/
      },

      /* Raw loader support for *.html
       * Returns file content as string
       *
       * See: https://github.com/webpack/raw-loader
       */
      {
        test: /\.html$/,
        loader: 'raw-loader',
        exclude: [helpers.root('src/index.html')]
      },

      /*
       * Handle font files // OLD loader: "url-loader?limit=10000&minetype=application/font-woff"
       */
      {
        test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
        use: [{
          loader: 'url-loader',
          options: {
            limit: 10000,
            minetype: 'application/font-woff'
          }
        }]

      },
      {
        test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
        loader: 'file-loader'
      }
    ]
  },

  /*
   * Add additional plugins to the compiler.
   *
   * See: http://webpack.github.io/docs/configuration.html#plugins
   */
  plugins: [
    new webpack.ProvidePlugin({
      i18next: 'i18next',
      i18nextBrowserLanguageDetector: 'i18next-browser-languagedetector',
      forerunnerdb: 'forerunnerdb',
      __extends: 'typescript-extends'
    }),
    /*
     * Plugin: CommonsChunkPlugin
     * Description: Shares common code between the pages.
     * It identifies common modules and put them into a commons chunk.
     *
     * See: https://webpack.github.io/docs/list-of-plugins.html#commonschunkplugin
     * See: https://github.com/webpack/docs/wiki/optimization#multi-page-app
     */
    new webpack.optimize.CommonsChunkPlugin({
      name: ['polyfills', 'vendor'].reverse()
    }),

    /*
     * Plugin: CopyWebpackPlugin
     * Description: Copy files and directories in webpack.
     *
     * Copies project static assets.
     *
     * See: https://www.npmjs.com/package/copy-webpack-plugin
     */
    new CopyWebpackPlugin([{
      from: 'src/assets',
      to: 'assets'
    }, {
      from: 'node_modules/@commandcentral/common-header-ui/dist/assets',
      to: 'assets'
    }

    ]),

    new webpack.ContextReplacementPlugin(
      // The (\\|\/) piece accounts for path separators in *nix and Windows
      /angular(\\|\/)core(\\|\/)@angular/,
      helpers.root('../src')
    ),

    new VersionFile({
      packageFile: path.join(__dirname, '..', '..', 'package.json'),
      templateString: 'APP_NAME: <%= package.name %> BUILD_DATE: <%= currentTime %> VERSION: <%= package.version %>\n',
      outputFile: path.join(__dirname, '..', '..', 'dist', 'version.txt')
    })
  ],

  /*
   * Include polyfills or mocks for various node stuff
   * Description: Node configuration
   *
   * See: https://webpack.github.io/docs/configuration.html#node
   */
  node: {
    global: true,
    fs: 'empty',
    crypto: 'empty',
    module: false,
    clearImmediate: false,
    setImmediate: false
  }
};
pearljamik commented 7 years ago

package.json

{
  "name": "commandcentral-aware",
  "version": "0.0.4",
  "description": "Aware project.",
  "author": "xxx",
  "homepage": "http://www.motorolasolutions.com/en_us/products/smart-public-safety-solutions/intelligence-led-public-safety/commandcentral-aware.html",
  "scripts": {
    "build": "npm run build:aware",
    "build:fast": "npm run clean:dist && mkdirp dist && cross-env LOCAL_ENV=develop webpack --config config/webpack.local.commandcentral.com.js --progress --profile --colors --display-error-details --display-cached --bail && cp -p -r src/styles dist/styles",
    "build:aware": "cross-env APP_ID=aware npm run build:app",
    "build:inform": "cross-env APP_ID=inform npm run build:app",
    "build:s3:aware": "cross-env APP_ID=aware LOCAL_ENV=develop GENERATE_CONFIG=true npm run build:app",
    "build:s3:inform": "cross-env APP_ID=inform LOCAL_ENV=develop GENERATE_CONFIG=true npm run build:app",
    "build:app": "npm run clean:dist && mkdirp dist && webpack --config config/webpack/webpack.build.js --progress --profile --colors --display-error-details --display-cached --bail && cp -p -r src/styles dist/styles",
    "ci": "npm run e2e && npm run test",
    "clean": "rimraf -- doc/* coverage/* dist/* reports/*",
    "clean:dist": "rimraf -- dist/*",
    "develop": "npm run server:aware:develop",
    "docs": "npm run typedoc -- --options typedoc.json --exclude '**/*.spec.ts,index.html' ./src/",
    "aware": "npm run aware:develop",
    "aware:develop": "npm run server:aware:develop",
    "aware:release": "npm run server:aware:release",
    "inform": "npm run inform:develop",
    "inform:develop": "npm run server:inform:develop",
    "inform:release": "npm run server:inform:release",
    "lint": "npm run tslint \"src/**/*.ts\"",
    "lint:e2e": "npm run tslint \"./e2e/src/**/*.ts\"",
    "rimraf": "rimraf",
    "mock": "npm run server:aware:mock",
    "server": "npm run server:dev",
    "server:dev": "npm run server:aware:develop",
    "server:dev:hmr": "npm run server:dev -- --hot",
    "server:inform:mock": "cross-env APP_ID=inform LOCAL_ENV=develop MOCK=true npm run server:dev:start",
    "server:aware:mock": "cross-env APP_ID=aware LOCAL_ENV=develop MOCK=true npm run server:dev:start",
    "server:aware:develop": "cross-env APP_ID=aware LOCAL_ENV=develop MOCK=false npm run server:dev:start",
    "server:aware:release": "cross-env APP_ID=aware LOCAL_ENV=release MOCK=false npm run server:dev:start",
    "server:inform:develop": "cross-env APP_ID=inform LOCAL_ENV=develop MOCK=false npm run server:dev:start",
    "server:inform:release": "cross-env APP_ID=inform LOCAL_ENV=release MOCK=false npm run server:dev:start",
    "server:dev:start": "webpack-dev-server --config config/webpack/webpack.local.js --https --cert local-cert/cert.pem --key local-cert/privkey.pem --inline --progress --profile --watch --content-base src/ --no-info",
    "start": "npm run server",
    "start:hmr": "npm run server:dev:hmr",
    "start:prod": "http-server dist --cors",
    "test": "node --max-old-space-size=4096 node_modules/karma/bin/karma start config/karma/karma.conf.js",
    "tslint": "tslint",
    "typedoc": "typedoc",
    "watch": "npm run watch:dev",
    "watch:dev": "npm run build:dev -- --watch",
    "watch:dev:hmr": "npm run watch:dev -- --hot",
    "watch:prod": "npm run build:prod -- --watch",
    "watch:test": "cross-env KARMA_DEBUG=true IGNORE_SKIPPED=true npm run test -- --auto-watch --no-single-run",
    "webpack": "webpack",
    "webpack-dev-server": "webpack-dev-server"
  },
  "dependencies": {
    "@angular/common": "4.2.0",
    "@angular/compiler": "4.2.0",
    "@angular/core": "4.2.0",
    "@angular/forms": "4.2.0",
    "@angular/http": "4.2.0",
    "@angular/platform-browser": "4.2.0",
    "@angular/platform-browser-dynamic": "4.2.0",
    "@angular/router": "4.0.3",
    "@commandcentral/angular-i18next": "1.1.0-angular-2-4-5.68523",
    "@commandcentral/cobalt-basic": "0.2.1",
    "@commandcentral/cobalt-table": "0.2.0",
    "@commandcentral/common-map": "3.2.25",
    "@commandcentral/common-web": "7.4.0",
    "@commandcentral/golden-layout": "1.6.32",
    "@commandcentral/iwc": "1.0.1",
    "@types/arcgis-js-api": "4.3.0",
    "angular2-cookie": "1.2.6",
    "angular2-esri-loader": "0.1.11",
    "core-js": "2.4.0",
    "detect-browser": "1.7.1",
    "dragula": "3.7.2",
    "flatpickr": "2.1.1",
    "font-awesome": "4.7.0",
    "forerunnerdb": "1.4.68",
    "generate-json-webpack-plugin": "0.2.1",
    "i18next": "3.4.4",
    "i18next-browser-languagedetector": "0.3.0",
    "latlon-geohash": "1.0.1",
    "lodash.debounce": "4.0.8",
    "lodash.isempty": "4.4.0",
    "lodash.isequal": "4.5.0",
    "lodash.get": "4.4.2",
    "lodash.merge": "4.6.0",
    "lodash.sortedindexby": "4.6.0",
    "lodash.sortedindexof": "4.1.0",
    "mobx": "2.3.1",
    "moment": "2.18.1",
    "ngx-bootstrap": "1.8.1",
    "ng2-dragula": "1.2.1",
    "ng2-select": "1.1.1",
    "ng2-tabs": "0.0.7",
    "ngx-color-picker": "4.1.0",
    "rxjs": "5.4.2",
    "typescript-extends": "1.0.1",
    "urijs": "1.16.1",
    "worker-loader": "0.8.0",
    "zone.js": "0.8.16"
  },
  "devDependencies": {
    "@angularclass/hmr": "2.1.3",
    "@angularclass/hmr-loader": "3.0.4",
    "@types/core-js": "0.9.42",
    "@types/hammerjs": "2.0.34",
    "@types/jasmine": "2.2.29",
    "@types/lodash": "4.14.71",
    "@types/node": "8.0.19",
    "@types/webpack": "3.0.5",
    "angular2-hmr": "0.8.1",
    "angular2-template-loader": "0.6.2",
    "awesome-typescript-loader": "3.1.3",
    "booleanify": "1.0.0",
    "bootstrap-sass": "3.3.7",
    "codelyzer": "1.0.0-beta.3",
    "compression-webpack-plugin": "0.3.2",
    "copy-webpack-plugin": "4.0.1",
    "cross-env": "3.2.4",
    "css-loader": "0.28.4",
    "electron": "1.7.5",
    "es6-promise": "4.0.5",
    "es6-promise-loader": "1.0.2",
    "es6-shim": "0.35.1",
    "es7-reflect-metadata": "1.6.0",
    "exports-loader": "0.6.3",
    "expose-loader": "0.7.1",
    "file-loader": "0.10.1",
    "font-awesome": "4.7.0",
    "font-awesome-webpack": "0.0.4",
    "guid": "0.0.12",
    "html-webpack-plugin": "2.29.0",
    "http-server": "0.10.0",
    "i18next-resource-store-loader": "0.1.1",
    "imports-loader": "0.7.1",
    "istanbul-instrumenter-loader": "0.2.0",
    "jasmine": "2.6.0",
    "json-loader": "0.5.4",
    "karma": "1.7.0",
    "karma-chrome-launcher": "2.0.0",
    "karma-coverage": "1.1.1",
    "karma-htmlfile-reporter": "0.3.5",
    "karma-jasmine": "1.1.0",
    "karma-mocha-reporter": "2.2.3",
    "karma-remap-coverage": "0.1.4",
    "karma-remap-istanbul": "0.6.0",
    "karma-sourcemap-loader": "0.3.7",
    "karma-webpack": "2.0.4",
    "less": "2.7.1",
    "lodash.set": "4.3.2",
    "mkdirp": "0.5.1",
    "ng2-slim-loading-bar": "2.0.4",
    "node-libs-browser": "2.0.0",
    "node-sass": "4.5.3",
    "null-loader": "0.1.1",
    "parse5": "2.2.3",
    "raw-loader": "0.5.1",
    "remap-istanbul": "0.9.5",
    "rimraf": "2.6.1",
    "sass-loader": "6.0.6",
    "signalr-no-jquery": "0.1.8",
    "simulant": "0.2.2",
    "source-map-loader": "0.2.0",
    "style-loader": "0.16.1",
    "sync-request": "4.1.0",
    "ts-helpers": "1.1.2",
    "ts-node": "1.6.1",
    "tslint": "5.5.0",
    "tslint-loader": "3.5.3",
    "typescript": "2.4.2",
    "url-loader": "0.5.8",
    "wallaby-webpack": "0.0.39",
    "webpack": "3.4.1",
    "webpack-config": "7.0.0",
    "webpack-dev-server": "2.6.1",
    "webpack-md5-hash": "0.0.5",
    "webpack-merge": "4.1.0",
    "webpack-version-file-plugin": "0.2.2"
  },
  "repository": {
    "type": "git",
    "url": "https://gitlab.commandcentral.com/cckrk/aware.git"
  },
  "license": "UNLICENSED",
  "engineStrict": true,
  "engines": {
    "node": ">= 6.9.2",
    "npm": ">= 3"
  }
}
ArtemGovorov commented 7 years ago

After a bit of researching, I found that this code:

var accepts = require('accepts');
var deprecate = require('depd')('express');
var isIP = require('net').isIP;
var typeis = require('type-is');
var http = require('http');
var fresh = require('fresh');
var parseRange = require('range-parser');
var parse = require('parseurl');
var proxyaddr = require('proxy-addr');

is actually express node module code from node_modules/express/lib/request.js. It means that something in your front end app, or one the module it's using, does imports/requires the express module.

It's not quite clear from your configs what exactly does it. You may try the following:

pearljamik commented 7 years ago
Mon, 14 Aug 2017 13:37:10 GMT wallaby:workers Sandbox (active) [jjp28] error: Uncaught Error: What code is calling it?
Mon, 14 Aug 2017 13:37:10 GMT wallaby:workers Failed to map the stack to user code, entry message: Uncaught Error: What code is calling it?, stack: Uncaught Error: What code is calling it?
at http://localhost:61144/____wallaby-bundle.js?1502717827308&wallabyFileId=bundle:234184
Runtime error: Uncaught Error: What code is calling it?
at http://localhost:61144/____wallaby-bundle.js?1502717827308&wallabyFileId=bundle:234184
Mon, 14 Aug 2017 13:37:10 GMT wallaby:workers Loaded 0 test(s)
Runtime error: Uncaught Error: Cannot find module '154'
at http://localhost:61144/wallaby-webpack.js?1502717826622:1
Mon, 14 Aug 2017 13:37:10 GMT wallaby:workers Sandbox (active) [uktlj] error: Uncaught Error: Cannot find module '154'
Mon, 14 Aug 2017 13:37:10 GMT wallaby:workers Failed to map the stack to user code, entry message: Uncaught Error: Cannot find module '154', stack: Uncaught Error: Cannot find module '154'
ArtemGovorov commented 7 years ago

Hmm, unfortunately for some reason there's no stack trace reported. Without a reproducible sample, I'm running out of ideas.

1) Try leaving one spec (any) in your tests list: {pattern: 'src/**/*spec.ts', load: false} and see if the error is reproduced. if it is reproduced, go to the step 3. 2) Add more specs, until it starts failing, this way you'll find the offending spec, leave just this spec in the tests list. 3) Try removing all tests from the spec, may leave just an empty test. Make sure it's still failing. 4) Remove the spec imports one by one, to see if you can find the import that causing the failure.

Follow the steps above to isolate the issue and create a reproducible sample. Once the error can be reproduced, you may share it as a Github repo, I'm happy to have a look.

pearljamik commented 7 years ago

I left 1 test which expect true to be true, I get the following stackTrace:

Module not found: Error: Can't resolve './' in 'C:\Users\gwk736\Gitlab\aware\node_modules\@angular\compiler\@angular'ModuleNotFoundError: Module not found: Error: Can't resolve './' in 'C:\Users\gwk736\Gitlab\aware\node_modules\@angular\compiler\@angular'
  at factoryCallback (C:\Users\gwk736\Gitlab\aware\node_modules\webpack\lib\Compilation.js:264:39)
  at C:\Users\gwk736\Gitlab\aware\node_modules\webpack\node_modules\async\dist\async.js:3861:9
  at C:\Users\gwk736\Gitlab\aware\node_modules\webpack\node_modules\async\dist\async.js:421:16
  at iteratorCallback (C:\Users\gwk736\Gitlab\aware\node_modules\webpack\node_modules\async\dist\async.js:996:13)
  at C:\Users\gwk736\Gitlab\aware\node_modules\webpack\node_modules\async\dist\async.js:906:16
  at C:\Users\gwk736\Gitlab\aware\node_modules\webpack\node_modules\async\dist\async.js:3858:13
  at onError (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:65:10)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at runAfter (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:158:4)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:146:3)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:252:11)
  at C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\UnsafeCachePlugin.js:40:4
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at runAfter (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:158:4)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:146:3)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:252:11)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:144:11)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:249:35)
  at resolver.doResolve.createInnerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\DescriptionFilePlugin.js:44:6)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at afterInnerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:168:10)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:252:11)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:144:11)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:249:35)
  at resolver.doResolve.createInnerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\DescriptionFilePlugin.js:44:6)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at runAfter (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:158:4)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:146:3)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:252:11)
  at runAfter (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:158:4)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:146:3)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:252:11)
  at runAfter (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:158:4)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:146:3)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:252:11)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:144:11)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:249:35)
  at resolver.doResolve.createInnerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\DescriptionFilePlugin.js:44:6)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at runAfter (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:158:4)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:146:3)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:252:11)
  at runAfter (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:158:4)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:146:3)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:252:11)
  at Resolver.<anonymous> (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\FileExistsPlugin.js:20:12)
  at C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:70:14
  at _combinedTickCallback (internal/process/next_tick.js:73:7)
  at process._tickCallback (internal/process/next_tick.js:104:9)
ArtemGovorov commented 7 years ago

Please create a GitHub repo where I could reproduce the issue.

pearljamik commented 7 years ago

Hi, I have found why:

protected waitForInit = Object.assign([], initializationArray);

`// This array is used to check if all modules are initialized

export const initializationArray: ReadonlyArray<InitializedType> =  [];`

`export enum InitializedType {
  IncidentsStore, ExternalLayer, CustomLayer, WebMapLayer, CustomerLayer, GoldenLayout
}

export class InitializedEvent extends LocalBaseEvent {

  constructor(public type: InitializedType) {
    super();
  }

}`

Somehow when this is added that prototype error occurs. Any ideas why?

ArtemGovorov commented 7 years ago

The code looks innocent, so I have no idea why it happens. Maybe something from imports of

IncidentsStore, ExternalLayer, CustomLayer, WebMapLayer, CustomerLayer, GoldenLayout

or

LocalBaseEvent

is causing the issue.

Try commenting things one by one from the IncidentsStore, ExternalLayer, CustomLayer, WebMapLayer, CustomerLayer, GoldenLayout list to see what causes the issue.

If you can create a sample repo, I'll be able to tell what's wrong very quickly.

pearljamik commented 7 years ago

And finally I have found the culprit:

this is what causes the error to happen. We use Forerunner database in our app, this line of code causes the issue (when I comment it it works)

public static FORERUNNER = new Forerunner('elementStore');

where import * as Forerunner from 'forerunnerdb';

any workaround for that ?

pearljamik commented 7 years ago

forerunnerdb versions is : 1.4.68

pearljamik commented 7 years ago

I can do like this:

declare var Forerunner: any;

but that sucks still...

ArtemGovorov commented 7 years ago

Looks like you have this alias in your webpack config:

'forerunnerdb': helpers.root('node_modules/forerunnerdb/js/builds/core.js'),

but you didn't add the alias to your wallaby webpack config:

var webpackPostprocessor = wallabyWebpack({
  ...
  alias: {
    ... // <--
  }

})

Because of the alias, your normal webpack build knows the file to bundle, but without the alias you make wallaby bundle different code (that includes some backend node code).

Hope it makes sense.

pearljamik commented 7 years ago

AAA , it makes perfect sense now. Thank You !

pearljamik commented 7 years ago

So one issue is resolved at least I am able to see the report. The other issue is still in the Failing Tests Webstorm console:

`Module not found: Error: Can't resolve './' in 'C:\Users\gwk736\Gitlab\aware\node_modules\@angular\compiler\@angular'ModuleNotFoundError: Module not found: Error: Can't resolve './' in 'C:\Users\gwk736\Gitlab\aware\node_modules\@angular\compiler\@angular'
  at factoryCallback (C:\Users\gwk736\Gitlab\aware\node_modules\webpack\lib\Compilation.js:264:39)
  at C:\Users\gwk736\Gitlab\aware\node_modules\webpack\node_modules\async\dist\async.js:3861:9
  at C:\Users\gwk736\Gitlab\aware\node_modules\webpack\node_modules\async\dist\async.js:421:16
  at iteratorCallback (C:\Users\gwk736\Gitlab\aware\node_modules\webpack\node_modules\async\dist\async.js:996:13)
  at C:\Users\gwk736\Gitlab\aware\node_modules\webpack\node_modules\async\dist\async.js:906:16
  at C:\Users\gwk736\Gitlab\aware\node_modules\webpack\node_modules\async\dist\async.js:3858:13
  at onError (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:65:10)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at runAfter (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:158:4)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:146:3)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:252:11)
  at C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\UnsafeCachePlugin.js:40:4
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at runAfter (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:158:4)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:146:3)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:252:11)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:144:11)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:249:35)
  at resolver.doResolve.createInnerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\DescriptionFilePlugin.js:44:6)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at afterInnerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:168:10)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:252:11)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:144:11)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:249:35)
  at resolver.doResolve.createInnerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\DescriptionFilePlugin.js:44:6)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at runAfter (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:158:4)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:146:3)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:252:11)
  at runAfter (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:158:4)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:146:3)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:252:11)
  at runAfter (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:158:4)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:146:3)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:252:11)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:144:11)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:249:35)
  at resolver.doResolve.createInnerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\DescriptionFilePlugin.js:44:6)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at runAfter (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:158:4)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:146:3)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:252:11)
  at runAfter (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:158:4)
  at innerCallback (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\Resolver.js:146:3)
  at loggingCallbackWrapper (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\createInnerCallback.js:31:19)
  at next (C:\Users\gwk736\Gitlab\aware\node_modules\tapable\lib\Tapable.js:252:11)
  at Resolver.<anonymous> (C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\FileExistsPlugin.js:20:12)
  at C:\Users\gwk736\Gitlab\aware\node_modules\enhanced-resolve\lib\CachedInputFileSystem.js:70:14
  at _combinedTickCallback (internal/process/next_tick.js:73:7)
  at process._tickCallback (internal/process/next_tick.js:104:9)

`

That does not prevent the tests to be successfully executed, but the drawback is only I cannot click on the failing tests in webstorm directly due to that error.

pearljamik commented 7 years ago

Ok, I resolved the issue !

ArtemGovorov commented 7 years ago

Awesome, thanks for the update!

Could you please share what was the solution for the last Module not found: Error: Can't resolve './' in ... error, so that other users hitting the issue may apply the solution?

pearljamik commented 7 years ago

I have another problem with component testing:

    TypeError: Cannot read property 'debugElement' of undefined
        at Object.<anonymous> src/app/common/components/radio-switch/radio-switch.component.spec.ts:40

also: TypeError: Cannot read property 'nativeElement' of undefined Object.<anonymous>

import {Component} from '@angular/core';
import {ComponentFixture, fakeAsync, TestBed, tick} from '@angular/core/testing';
import {By} from '@angular/platform-browser';
import {RadioSwitchComponent} from './radio-switch.component';
import {AppTestModule} from '../../../app-test.module';
import {I18N_PROVIDERS_FOR_TESTS} from '../../services/i18n/i18n-providers.stub';
import {NgModel} from '@angular/forms';

describe('RadioSwitchComponent', () => {

  let fixture: ComponentFixture<CustomizedComponent>;

  beforeEach(() => TestBed.configureTestingModule({
    imports: [
      AppTestModule
    ],
    declarations: [
      CustomizedComponent
    ],
    providers: [
      ...I18N_PROVIDERS_FOR_TESTS,
      RadioSwitchComponent
    ]
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(CustomizedComponent);
    fixture.detectChanges();
  });

  it('Should be inactive by default', () => {
    expect(fixture.nativeElement.querySelectorAll('.radio-switch-wrapper:not(.active)').length).toBe(1);
  });

  it('Should be one element and active, when passing 1 as argument', () => {
    let children = fixture.debugElement.query(By.directive(RadioSwitchComponent)).componentInstance;
    let body = fixture.debugElement.nativeElement;
    children.value = 1;
    fixture.detectChanges();
    expect(body.querySelectorAll('.radio-switch-wrapper.inactive').length).toBe(0);
    expect(body.querySelectorAll('.radio-switch-wrapper').length).toBe(1);