карма параллельное выполнение контрольных примеров дважды - PullRequest
1 голос
/ 11 ноября 2019

Я обновляю свой angular с 4 до версии 7. У меня была karma-параллель для запуска tdd, и она работала, как и ожидалось, с Angular 4. Теперь после обновления до 7 те же тесты выполняются дважды, прежде чем прекращать выполнение. Мой файл karma.conf.js, как показано ниже,

const path = require('path');
module.exports = function (config) {
  config.set({
    basePath: '',
    frameworks: [ 'parallel', 'jasmine', '@angular-devkit/build-angular'],
    plugins: [
      require('karma-parallel'),
      require('karma-jasmine'),
      require('karma-spec-reporter'),
      require('karma-chrome-launcher'),
      require('karma-jasmine-html-reporter'),
      require('karma-coverage-istanbul-reporter'),
      require('@angular-devkit/build-angular/plugins/karma')
    ],
    parallelOptions: {
      executors: 3, // For Jenkins enterprise, stick to 6 executors. For local laptop, change to 3-5
      shardStrategy: 'round-robin'
    },
    client: {
      jasmine: {
        random: false
      },
      clearContext: false
    },
    coverageIstanbulReporter: {
      reports: ['html', 'json', 'text-summary'],
      dir: path.join(__dirname, 'coverage'),
      fixWebpackSourcePaths: true
    },    
    reporters: ['spec', 'kjhtml'],
    specReporter: {
         maxLogLines: 5,
         suppressErrorSummary: true,
         suppressFailed: false,
         suppressPassed: false,
         suppressSkipped: true,
         showSpecTiming: true,
         failFast: false
      },
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['ChromeHeadlessNoSandbox'],
    customLaunchers: {
        ChromeHeadlessNoSandbox: {
            base: 'ChromeHeadless',
            flags: [
                '--no-sandbox', // required to run without privileges in docker
                '--user-data-dir=/tmp/chrome-test-profile',
                '--disable-web-security',
                '--no-proxy=http://0.0.0.0:9876/'
            ]
        }
    },
    singleRun: true,
    concurrency: Infinity,
    captureTimeout: 180000,
    browserDisconnectTimeout: 90000,
    browserNoActivityTimeout: 180000
  });
};

Команда, используемая для запуска контрольных примеров, выглядит следующим образом:

node --max_old_space_size=4096 node_modules/@angular/cli/bin/ng test --watch=false --code-coverage --source-map=false

Пожалуйста, совет.

Ответы [ 2 ]

1 голос
/ 01 декабря 2019

Когда вы запускаете ng test, он запускает тесты для всех проектов.

Например, если у вас есть эти два проекта в вашем angular.json:

  • hello-world (с 10 тестами)
  • utilities (с 100 тестами)

, тогда при запуске ng test будут запускаться тесты для обоих hello-world и utilities.

Однако, если вы используете Karma с включенными файлами наблюдения или с автоматическим наблюдением , он остановится на первом проекте, поэтому вы увидите только 10 выполненных тестов (или100 тестов в зависимости от порядка проектов). Затем, когда вы нажимаете Ctrl + C и выходите из процесса Karma, он переходит к следующему проекту, компилирует его и запускает тесты. Таким образом, у вас будет два тестовых прогона.

Что делать?

  • Если у вас несколько приложений Angular, но вы развертываете один дляproduction, вы должны использовать ng test <app> с именем проекта, который вы развертываете.
  • Если у вас есть приложение Angular и библиотека , вам нужно протестировать приложение и библиотеку: ng test <app> && ng test <library>
  • Если вы хотите запустить полный набор тестов, просто сделайте ng test и не забудьте изменить Karma для запуска одного тестового прогона, а не для автоматического отслеживания измененных файлов!
  • Обновите karma.conf.js для каждого проекта, чтобы убедиться, что он имеет правильные настройки (без просмотра, одиночного запуска, правильные браузеры для использования)
1 голос
/ 20 ноября 2019

Итак, я нашел проблему. В файле angular.json у меня есть 2 проекта, в обоих из которых настроен тестовый блок, и он дважды запускался. Удаление последнего тестового блока проекта решило его. Не уверен, что Angular 4 запускал TDD только один раз, в то время как в той же конфигурации Angular 7 запускал его дважды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...