0

Aurelia CLI ( ) を使用して Aurelia アプリを作成し、au newコード カバレッジを設定したいと考えています (できればkarma-coverageを使用しますが、それが不可能な場合は何でも使用します)。

まず、タスクを a にnpm install karma-coverage --save-devコピーします( を実行できるようにします)。test.jscover.jsau cover

cover.js

import {Server as Karma} from 'karma';
import {CLIOptions} from 'aurelia-cli';
// import project from "../aurelia.json";

export function cover(done) {
  new Karma({
    // This is the same as what's in karma.conf.js after running
    // Except I added the 'src\\**\\*.js' part
    files: [
      'scripts\\vendor-bundle.js',
      {pattern: 'test\\unit\\**\\*.js', included: false},
      'test/aurelia-karma.js',
      'scripts\\app-bundle.js',
      'scripts\\materialize-bundle.js',
      {pattern: 'src\\**\\*.js', included: false}
    ],
    configFile: __dirname + '/../../karma.conf.js',
    singleRun: !CLIOptions.hasFlag('watch'),
    reporters: ['progress', 'coverage'],
    //logLevel: 'debug',
    preprocessors: {
      // [project.unitTestRunner.source]: [project.transpiler.id],  // Is this actually needed? Nothing changes if I add or remove this...
      'src/**/*.js': ['babel', 'coverage']
    },
    coverageReporter: {
      includeAllSources: true,
      reporters: [
        {type: 'html', dir: 'coverage'},
        {type: 'text'}
      ]
    }
  }, done).start();
}

export default cover;

これは…どこかに行きますか?

<code>au cover</code> のコンソール出力

しかし、テストが個々の src ファイルにリンクされているとは思いません (代わりに にリンクされていますapp-bundle.js)。

Aurelia アプリの src ファイル レベル (つまり、バンドル レベルではない) でコード カバレッジを取得する方法はありますか?

その他の関心のあるファイル

app.js

export class App {
  constructor() {
    this.message = 'Hello World!';
  }
}

カルマ.conf.js

"use strict";
const path = require('path');
const project = require('./aurelia_project/aurelia.json');

let testSrc = [
  { pattern: project.unitTestRunner.source, included: false },
  'test/aurelia-karma.js'
];

let output = project.platform.output;
let appSrc = project.build.bundles.map(x => path.join(output, x.name));
let entryIndex = appSrc.indexOf(path.join(output, project.build.loader.configTarget));
let entryBundle = appSrc.splice(entryIndex, 1)[0];
let files = [entryBundle].concat(testSrc).concat(appSrc); console.log(files);

module.exports = function(config) {
  config.set({
    basePath: '',
    frameworks: [project.testFramework.id],
    files: files,
    exclude: [],
    preprocessors: {
      [project.unitTestRunner.source]: [project.transpiler.id]
    },
    'babelPreprocessor': { options: project.transpiler.options },
    reporters: ['progress'],
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: true,
    browsers: ['Chrome'],
    singleRun: false,
    // client.args must be a array of string.
    // Leave 'aurelia-root', project.paths.root in this order so we can find
    // the root of the aurelia project.
    client: {
      args: ['aurelia-root', project.paths.root]
    }
  });
};
4

3 に答える 3