Как запустить тесты в гибридном приложении Angular и AngularJs?

Поскольку я хочу перенести свое приложение AngularJs на Angular 7, я создал гибридное приложение с помощью ngUpgrade. Старое приложение AngularJs теперь встроено в новое приложение Angular.

Когда я запускаю ng test, мои тесты Angular запускаются, и это нормально. Но я также хочу запустить старые тесты, написанные на AngularJs.

На данный момент моя конфигурация Karma выглядит так:

'use strict';

const webpackConfig = require('./karma.webpack.config');

module.exports = function (config) {
  config.set({
    basePath: '',
    frameworks: ['jasmine', '@angular-devkit/build-angular', 'es6-shim'],
    plugins: [
      require('karma-jasmine'),
      require('karma-chrome-launcher'),
      require('karma-jasmine-html-reporter'),
      require('karma-coverage-istanbul-reporter'),
      require('@angular-devkit/build-angular/plugins/karma'),
      require('karma-es6-shim'),
      require('karma-junit-reporter'),
      require('karma-webpack'),
    ],
    client:{
      clearContext: false // leave Jasmine Spec Runner output visible in browser
    },
    coverageIstanbulReporter: {
      dir: require('path').join(__dirname, 'coverage'),
      reports: [ 'html', 'lcovonly' ],
      fixWebpackSourcePaths: true
    },

    mime: {
      'text/x-typescript': ['ts','tsx']
    },

    exclude: [
      '**/*.html'
    ],

    preprocessors: {
      './karma.entrypoint.ts': ['webpack']
    },

    webpack: webpackConfig,

    webpackMiddleware: {
      noInfo: true,
      stats: 'errors-only'
    },

    junitReporter : {
      // results will be saved as $outputDir/$browserName.xml
      outputDir : 'build/test-results/test/'
    },

    reporters: ['progress', 'kjhtml', 'junit'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome'],
    singleRun: false
  });
}; 

Файл ./karma.webpack.config:

    const config = require('./webpack.config.js')();
    const webpack = require('webpack');
    const path = require('path');
    const nibStylusPlugin = require('nib');
    const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');

    module.exports = Object.assign({}, config, {
       context: path.resolve(__dirname, '.'),
       entry: {
        test: './karma.entrypoint.ts'
       },
       mode: 'development',
       devtool: 'cheap-module-inline-source-map',
       optimization: {
         splitChunks: false,
         runtimeChunk: false
       },
       plugins: [
         new ForkTsCheckerWebpackPlugin(),
         new webpack.ProvidePlugin({
           "window.jQuery": "jquery",
           tv4: "tv4"
         }),
         new webpack.LoaderOptionsPlugin({
           options: {
             stylus: {
               use: [nibStylusPlugin()],
               import: ['~nib/lib/nib/index.styl'],
             }
           }
         })
       ]
     });

И последнее, но не менее важное: karma.entrypoint.ts:

    import 'jquery';
    import 'angular';
    import 'angular-mocks';
    import * as moment from 'moment';
    import{appConfigMock} from './karma.app-mock.config';

    window['__APP_CONFIG__'] = appConfigMock;
    (<any>moment).suppressDeprecationWarnings = true;

    const testsContext = (<any>require).context('./src/app/', true, /\.spec\.ts$/);
    testsContext.keys().forEach(testsContext);

Раньше, когда у меня было только приложение AngularJs, я запускал тесты с очень похожей структурой, используя команду karma. Он использовал мою конфигурацию веб-пакета для создания новой конфигурации веб-пакета кармы. Теперь, когда я запускаю его с помощью команды ng test, я даже не могу require './karma.webpack.config' в начале конфигурации кармы (я получаю Invalid config file! TypeError: require(...) is not a function).

Как мне подойти к этому случаю, чтобы запустить все тесты?


person Hubert Kubiak    schedule 01.03.2019    source источник


Ответы (1)


В конце концов я решил это, запустив тесты отдельно, но с помощью одной команды npm npm run test:


    "test-ng1": "cross-env APP_CONFIG=testing NODE_ENV=development karma start --single-run",
    "test-ng2-apps": "ng test --watch=false --ts-config=./karma.tsconfig.json",
    "test": "yarn test-ng2-apps && yarn test-ng1",
person Hubert Kubiak    schedule 05.11.2019