2017-02-16 17 views
5

Uruchomiłem następującą komendę, aby przetestować jednostkę i wygenerować raport dotyczący kodu kodu.Badanie zasięgu kątowego wszystkich plików

ng test --code-coverage 

Jest to pisanie raportu o zasięgu kodu w folderze zasięgu.

Potrzebuję zobaczyć pokrycie całego projektu, a nie tylko plik, dla którego istnieją testy.

karma.conf.js

module.exports = function (config) { 
    config.set({ 
    basePath: '', 
    frameworks: ['jasmine', 'angular-cli'], 
    plugins: [ 
     require('karma-jasmine'), 
     require('karma-jasmine-html-reporter'), 
     require('karma-chrome-launcher'), 
     require('karma-remap-istanbul'), 
     require('angular-cli/plugins/karma'), 
     require('karma-coverage'), 
     require('karma-sourcemap-loader') 

    ], 
    files: [ 
     { pattern: './src/test.ts', watched: false } 
    ], 
    preprocessors: { 
     './src/test.ts': ['angular-cli'] 
    }, 
    mime: { 
     'text/x-typescript': ['ts','tsx'] 
    }, 
    remapIstanbulReporter: { 
     reports: { 
      html: 'coverage', 
     lcovonly: './coverage/coverage.lcov' 
     } 
    }, 
    angularCli: { 
     config: './angular-cli.json', 
     environment: 'dev' 
    }, 
    reporters: config.angularCli && config.angularCli.codeCoverage 
       ? ['progress', 'karma-remap-istanbul'] 
       : ['progress', 'kjhtml'], 
    coverageReporter: { 
     includeAllSources: true 
    }, 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: true, 
    browsers: ['Chrome'], 
    singleRun: false 
    }); 
}; 
+0

Mają ten sam problem. Czy rozwiązałeś to? – Vnuuk

+0

@Vnuuk https://github.com/angular/angular-cli/issues/1735 –

Odpowiedz

-1

skorzystać z poniższego danego polecenia, by sprawdzić pokrycia kodu:

ng test -cc 
+0

Nie o to prosił OP. Angular-cli sprawdza tylko zasięg kodu dla plików, które mają specyfikację. OP szuka sposobu na zrobienie wszystkich plików bez względu na to, czy mają specyfikację czy nie –

3

Oto sposób, aby to zrobić:

  1. Dodaj client sekcja do Twojego karma.conf.js podobnie jak poniżej:

    plugins: [ 
        ... 
    ], 
    client: { 
        codeCoverage: config.angularCli.codeCoverage 
    }, 
    files: [ 
        ... 
    ], 
    
  2. Zmień test.ts wymagają plików według codeCoverage parametru:

    let context; 
    
    if (__karma__.config.codeCoverage) { 
        context = require.context('./app/', true, /\.ts/); 
    } else { 
        context = require.context('./app/', true, /\.spec\.ts/); 
    } 
    
    context.keys().map(context); 
    

UPDATE:

Od Kątowymi CLI są wymagane 1.5.0 dodatkowe etapy:

  1. Obok tsconfig.spec.json dodać tsconfig-cc.spec.json plik o następującej treści:

    { 
        "extends": "./tsconfig.spec.json", 
        "include": [ 
        "**/*.ts" 
        ] 
    } 
    
  2. W swojej angular-cli.json dodać następujące apps tablicy:

    { 
        "root": "src/", 
        "polyfills": "polyfills.ts", 
        "test": "test.ts", 
        "testTsconfig": "tsconfig-cc.spec.json" 
    } 
    
  3. W swoim karma.conf.js dodać następujący element do sekcji angularCli:

    app: config.angularCli.codeCoverage ? '1' : '0' 
    

    ostatecznie powinno to wyglądać mniej więcej tak:

    angularCli: { 
        environment: 'dev', 
        app: config.angularCli.codeCoverage ? '1' : '0' 
    }, 
    

Więc co tu się dzieje?

Wygląda na to, że mają poprawioną wtyczkę kompilatora Angular, która pobiera teraz pliki globs z tsconfig.spec.json. Dopóki uwzględnimy tylko **/*.spec.ts w tsconfig.spec.json są to jedyne pliki, które będą uwzględnione w zasięgu.

Oczywistym rozwiązaniem jest dodanie do wszystkich plików tsconfig.spec.json (oprócz require.context).Spowoduje to jednak spowolnienie wszystkich testów, nawet podczas pracy bez zasięgu (czego nie chcemy).

Jednym z rozwiązań jest używanie funkcji angular-cli do pracy z wieloma aplikacjami.
Dodając kolejny wpis do tablicy apps, dodajemy kolejną konfigurację dla "innej" (która jest w rzeczywistości tą samą).
Usuwamy wszystkie nieistotne informacje z tej konfiguracji, pozostawiając jedynie konfigurację testową i wstawiamy kolejny tsconfig, który zawiera wszystkie pliki ts.
Wreszcie, mówimy o wtyczce angular-clikarma, aby uruchomić testy z konfiguracją drugiej aplikacji (indeks 1) w przypadku, gdy działa z pokryciem kodu i uruchomić z konfiguracją pierwszej aplikacji (indeks 0), jeśli jest działa bez zasięgu kodu.

Ważna uwaga: w tej konfiguracji Zakładam, że masz tylko jedną aplikację w .angular-cli.json. Jeśli masz więcej, musisz odpowiednio dostosować indeksy.

0

karma.conf.js powinien być taki. Żadna inna konfiguracja nie jest wymagana Ng cli zajmie się wszystkim. zatrzymaj poprzedni przebieg ng test i uruchom ng test --code-coverage.

module.exports = function (config) { 
    config.set({ 
    basePath: '', 
    frameworks: ['jasmine', '@angular/cli'], 
    plugins: [ 
     require('karma-jasmine'), 
     require('karma-chrome-launcher'), 
     require('karma-jasmine-html-reporter'), 
     require('karma-coverage-istanbul-reporter'), 
     require('@angular/cli/plugins/karma') 
    ], 
    client:{ 
     clearContext: false // leave Jasmine Spec Runner output visible in browser 
    }, 
    coverageIstanbulReporter: { 
     reports: [ 'html', 'lcovonly' ], 
     fixWebpackSourcePaths: true 
    }, 
    angularCli: { 
     environment: 'dev' 
    }, 
    reporters: ['progress', 'kjhtml'], 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: true, 
    browsers: ['Chrome'], 
    singleRun: false 
    }); 
}; 
Powiązane problemy