2016-03-19 20 views
10

Tôi đang phát triển một ứng dụng phía máy khách và tôi gặp sự cố khi tạo cấu hình Karma đúng. Ngay bây giờ, tôi đã thiết lập của tôi như sau:Webpack Karma Istanbul Remapping cho TypeScript

Webpack: Sử dụng ts-loader, biên dịch nguyên cảo, tài sản, vv

Karma: Sử dụng các plugin webpack, tải cấu hình Webpack (trong đó sử dụng ts-loader), sau đó chạy tất cả các bài kiểm tra đơn vị với Jasmine + PhantomJS

Bài kiểm tra đơn vị tất cả đều chạy tốt, nhưng tôi chưa tìm ra cách xử lý việc lặp lại webpack istanbul. Karma-webpacks dường như không tạo ra các bản đồ nguồn để cho phép việc tái diễn xảy ra. Bất kỳ con trỏ sẽ được đánh giá cao!

Karma Config:

var webpackConfig = require("./webpack.config.js"); 
delete webpackConfig.entry; 

module.exports = function (config) { 
    config.set({ 
     // base path that will be used to resolve all patterns (eg. files, exclude) 
     basePath: '', 

     // frameworks to use 
     // available frameworks: https://npmjs.org/browse/keyword/karma-adapter 
     frameworks: ['jasmine'], 

     // list of files/patterns to load in the browser 
     files: [ 
      // Non-automatically bundled libraries 
      'app/client/js/lib/easeljs.min.js', 
      'app/client/js/lib/tweenjs.min.js', 
      // Entry File 
      'app/client/js/index.ts', 
      'app/client/html/**/*.html', 

      // Test files and dependencies 
      'node_modules/angular-mocks/angular-mocks.js', 
      'test/client/**/*.spec.js' 
     ], 

     // preprocess matching files before serving them to the browser 
     // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor 
     preprocessors: { 
      '**/*.html': ['ng-html2js'], 
      'app/client/js/index.ts': ['webpack', 'sourcemap', 'coverage'] 
     }, 

     ngHtml2JsPreprocessor: { 
      cacheIdFromPath: function (filepath) { 
       // Remaps the path for Karma webpack 
       return '/_karma_webpack_//' + filepath.replace(/^.*[\\\/]/, ''); 
      }, 
      moduleName: 'templates' 
     }, 

     webpack: webpackConfig, 

     webpackMiddleware: { 
      noInfo: true 
     }, 

     // test results reporter to use 
     // possible values: 'dots', 'progress' 
     // available reporters: https://npmjs.org/browse/keyword/karma-reporter 
     reporters: ['progress', 'coverage'], 

     coverageReporter: { 
      dir: 'build/client/test/coverage/', 
      reporters: [ 
       { 
        type: 'json', 
        subdir: '.' 
       } 
      ] 
     }, 

     // web server port 
     port: 9876, 

     // enable/disable colors in the output (reporters and logs) 
     colors: true, 

     // level of logging 
     // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG 
     logLevel: config.LOG_INFO, 

     // enable/disable watching file and executing tests whenever any file changes 
     autoWatch: true, 

     // start these browsers 
     // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher 
     browsers: ['PhantomJS'], 

     // Concurrency level 
     // how many browser should be started simultaneously 
     concurrency: Infinity 
    }) 
}; 

Trả lời

2

Hiện nay Karma Remap Istanbul là gói chỉ có khả năng tạo ra vùng phủ sóng nguyên cảo inline. Nó cũng rõ ràng có thể được quản lý bằng cách chỉ cần gọi remap-istanbul trên coverage.json được tạo của bạn.

Gói này sẽ giúp bạn đánh máy tóm tắt sản lượng vùng phủ sóng trên console giả sử bạn thiết lập cấu hình đầu ra để text: undefined

Thêm nó vào công việc hiện tại của bạn là đủ đơn giản, các tài liệu hướng dẫn về cách chính xác để làm như vậy trong các gói github README.md.

+1

Tôi không thể làm việc này. Tôi có cùng một vấn đề với remap-instanbul phàn nàn về các bản đồ nguồn bị thiếu. Tôi không thấy câu trả lời này đề cập đến câu hỏi của @ user2254679 như thế nào. –

1

Install karma-typescript:

npm install karma-typescript --save-dev 

Đặt này trong karma.conf.js của bạn:

frameworks: ["jasmine", "karma-typescript"], 

files: [ 
    { pattern: "src/**/*.ts" } 
], 

preprocessors: { 
    "**/*.ts": ["karma-typescript"] 
}, 

reporters: ["progress", "karma-typescript"], 

browsers: ["Chrome"] 

này sẽ chạy thử nghiệm đơn vị đánh máy của bạn một cách nhanh chóng và tạo Istanbul bảo hiểm html trông như thế này :

Thi s loại bỏ sự cần thiết phải sử dụng Karma và webpack với nhau, Karma được sử dụng để chạy thử nghiệm và tạo vùng phủ sóng, webpack được sử dụng để đóng gói.

+0

Số đếm ở lề và số dòng/hàm/chi nhánh/câu lệnh không xuất hiện để khớp với tệp ts ... – robmcm

+0

@robmcm: Có 7 dòng mã (không bao gồm dòng mới), vì vậy 7 câu lệnh, 0 chi nhánh vì không có câu lệnh "if", 3 hàm (lớp xuất ... hàm khởi tạo và hàm sayHello) và 5 dòng được đánh dấu bằng 1x, tức là số lần dòng được nhấn bởi kiểm tra đơn vị, vì vậy 5 dòng. 7, 0, 3, 5 dường như đã tăng lên, nhưng nếu bạn nhìn thấy một cái gì đó tôi không làm, hãy cho tôi biết! –

+0

Cách dòng 11 được đánh dấu, nhưng không phải là 10? – robmcm

Các vấn đề liên quan