Тестирование угловых мутаций с помощью Stryker, почему Stryker запускает браузер: не определено? - PullRequest
0 голосов
/ 19 декабря 2018

Я хочу использовать stryker для тестирования мутаций в моем угловом проекте.

Я попытался поместить свой код в этот репозиторий: https://github.com/nicojs/angular-stryker-example однако, после ввода моего кода:

Karma.conf.js:

module.exports = function (config) {
  config.set({
    basePath: '',
    frameworks: ['jasmine', '@angular-devkit/build-angular'],
    plugins: [
      require('karma-jasmine'),
      require('karma-chrome-launcher'),
      require('karma-jasmine-html-reporter'),
      require('karma-phantomjs-launcher'),
      require('karma-coverage-istanbul-reporter'),
      require('@angular-devkit/build-angular/plugins/karma'),
    ],
    client:{
      clearContext: false // leave Jasmine Spec Runner output visible in browser
    },
    coverageIstanbulReporter: {
      dir: require('path').join(__dirname, 'coverage'),
      reports: ['html', 'lcov', 'cobertura'],
      fixWebpackSourcePaths: true
    },
    reporters: ['progress', 'kjhtml'],
    port: 9876,
    colors: true,
    logLevel: config.DEBUG,
    autoWatch: false,
    browsers: ['PhantomJS'],
    singleRun: true,
    customLaunchers: {
      ChromeHeadless: {
        base: 'Chrome',
        flags: [
          '--headless',
          '--disable-gpu',
          '--no-sandbox',
          // Without a remote debugging port, Google Chrome exits immediately.
          '--remote-debugging-port=9222',
        ],
      }
    }
  });
};

Stryker.conf.js:

const getProjectDetails = require('@angular/cli/utilities/project').getProjectDetails;
const appConfig = getProjectDetails();

module.exports = function (config) {
  config.set({
    mutate: [
      'src/app/*.component.ts'
    ],
    testRunner: 'karma',
    maxConcurrentTestRunners: 4,
    mutator: 'typescript',
    transpilers: ['webpack'],
    reporter: ['html', 'clear-text', 'progress'],
    testFramework: 'jasmine',
    coverageAnalysis: 'off',
    karmaConfig: {
      //configFile: 'karma.conf.js',
      frameworks: ['jasmine'],
      customContextFile: require.resolve('@angular-devkit/build-angular/src/angular-cli-files/plugins/karma-context.html'),
      customDebugFile: require.resolve('@angular-devkit/build-angular/src/angular-cli-files/plugins/karma-debug.html'),
      plugins: [
        require.resolve('karma-jasmine'),
        require('karma-phantomjs-launcher'),
      ],
      proxies: {
        "/_karma_webpack_/": "/base/dist/"
      },
      files: [
        { pattern: 'dist/*.js', included: false }
      ],
      browsers: ['PhantomJS']
    },
    tsconfigFile: 'tsconfig.json',
    webpack: {
      configFile: 'webpack-stryker.conf.js'
    },
    logLevel: 'info'
  });
};

Package.json:

{
  "name": "wereldwijde-weerweddenschappen",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test --browsers PhantomJS --code-coverage",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "stryker": "stryker run",
    "postinstall": "node patch.js",
    "trufflecompile": "truffle compile",
    "truffle-test": "truffle.cmd test test/with-oraclize-test.js"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "7.0.0",
    "@angular/cdk": "7.0.2",
    "@angular/common": "6.1.7",
    "@angular/compiler": "6.1.7",
    "@angular/core": "6.1.7",
    "@angular/forms": "6.1.7",
    "@angular/http": "6.1.7",
    "@angular/material": "7.0.2",
    "@angular/platform-browser": "6.1.7",
    "@angular/platform-browser-dynamic": "6.1.7",
    "@angular/platform-server": "6.1.7",
    "@angular/router": "6.1.7",
    "arr-flatten": "1.1.0",
    "chai": "4.2.0",
    "core-js": "2.5.4",
    "ganache-cli": "6.2.3",
    "hammerjs": "2.0.8",
    "intl": "1.2.5",
    "isarray": "2.0.4",
    "phantomjs": "2.1.7",
    "phantomjs-prebuilt": "2.1.16",
    "solidity-coverage": "0.5.11",
    "truffle-assertions": "0.7.1",
    "tslint-sonarts": "^1.8.0",
    "web3": "1.0.0-beta.36",
    "web3-utils": "1.0.0-beta.36",
    "rxjs": "^6.0.0",
    "zone.js": "^0.8.26"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.6.1",
    "@angular/cli": "~6.0.1",
    "@angular/compiler-cli": "^6.0.0",
    "@angular/language-service": "^6.0.0",
    "@types/jasmine": "~2.8.6",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "~8.9.4",
    "angular2-template-loader": "^0.6.2",
    "awesome-typescript-loader": "^5.0.0",
    "codelyzer": "~4.2.1",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~1.7.1",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~1.4.2",
    "karma-jasmine": "~1.1.1",
    "karma-jasmine-html-reporter": "^0.2.2",
    "karma-ng-scenario": "^1.0.0",
    "karma-phantomjs-launcher": "1.0.4",
    "protractor": "~5.3.0",
    "stryker": "^0.24.0",
    "stryker-api": "^0.17.1",
    "stryker-html-reporter": "^0.14.1",
    "stryker-karma-runner": "^0.15.1",
    "stryker-typescript": "^0.11.1",
    "stryker-webpack-transpiler": "^0.5.0",
    "truffle": "4.1.12",
    "truffle-contract": "3.0.4",
    "ts-node": "~5.0.1",
    "tslint": "~5.9.1",
    "typescript": "~2.7.2"
  }
}

Я оставилwebpack-stryker.conf.js без изменений

Я ожидаю, что мои мутационные тесты будут запущены, но я получаю следующую ошибку:

Launching browser PhantomJS with unlimited concurrency
Starting browser undefined
 TypeError: _.forOwn is not a function
    at runnerOptions.strykerOptions.karmaConfig.plugins.launcher:PhantomJS._start (eval at deserialize <project_folder>\node_modules\surrial\src\index.js:16:18)

Кто-нибудь знает, почему он говорит, что его стартовый браузер не определен и почемуон не может найти для него функции?

...