0

나는 Karma CoffeeScript 코드 커버리지 전 처리기에 문제가있을 수 있다고 생각합니다. 아니면 내가 뭘 잘못하고 있는지 모르겠다! 그래서 나는 당신에게 StackOverflow를 찾아왔다. 기본적으로 필자는 karma 테스트 세트를 lcov 형식으로 코드 커버리지를 제공하도록 설정하고 있으므로 CodeClimate로 보내 줄 수 있습니다. 나는 그것을 사용하여 내 테스트 스위트 (사용) 작업을했지만, 지금은 오류를 제외하고는 아무것도 얻을 수없는 것 같습니다. 내 프로젝트는 레일 프로젝트이고 파일은 자산 파이프 (예 : name.js.coffee 파일)에 의해 사전 처리되도록 설정되어 있지만 커버리지 전 처리기에 포함 시키면 사전 처리하는 것처럼 보이지만 오류가 발생합니다 모든 파일에. 예를 들어, 무엇인가가 함수로 처리 될 것이고, 함수는 예약어 등이라고 말할 것입니다. 그래서 그들은 여전히 ​​그 구문을 적절히 추측하고 사용하고있는 coffeescript 파일이라고 생각합니다. 난 그냥 coffeescript 전처리기를 사용하여 처리하려고 할 때 coffeescript 오류가 발생합니다. 도움? 예를 들어 사양 및 JS 파일을 여기카르마와 CoffeScript 및 코드 Coverage

// Karma configuration 
// Generated on Sat Aug 02 2014 00:12:00 GMT-0600 (MDT) 

module.exports = function (config) { 
    config.set({ 

     // base path that will be used to resolve all patterns (eg. files, exclude) 
     basePath: __dirname, 


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

     plugins: [ 
      'karma-jasmine', 
      'karma-firefox-launcher', 
      'karma-coffee-preprocessor', 
      'karma-coverage' 
     ], 

     // list of files/patterns to load in the browser 
     // TODO: this is not requiring files correctly, need to fix TR-335 
     files: [ 
      'vendor/assets/javascripts/karma-jasmine/lib/jasmine.js', 
      'vendor/assets/javascripts/karma-jasmine/src/adapter.js', 
      'vendor/assets/javascripts/angular/angular.js', 
      'vendor/assets/javascripts/angular-resource.min.js', 
      'vendor/assets/javascripts/angular-mocks/angular-mocks.js', 
      'vendor/assets/javascripts/jquery-2.1.1.min.js', 
      'vendor/assets/javascripts/jquery.dataTables.min.js', 
      'vendor/assets/javascripts/d3/d3.js', 
      'vendor/assets/javascripts/nvd3/nv.d3.js', 
      'vendor/assets/javascripts/angularjs-nvd3-directives/dist/angularjs-nvd3-directives.js', 
      'vendor/assets/javascripts/ui-bootstrap-tpls-0.11.0.min.js', 
      'vendor/assets/javascripts/*.*js', 
      'spec/javascripts/*_spec.js*', 
      'spec/javascripts/**/*_spec.js*', 
      'app/assets/javascripts/app.js.coffee', 
      'app/assets/javascripts/controllers/root_controller.js.coffee', 
      'app/assets/javascripts/controllers/lecture_ctrl.js.coffee', 
      'app/assets/javascripts/factories/user.js.coffee', 
      'app/assets/javascripts/factories/orgtrainuser.js.coffee', 
      { pattern: 'app/assets/javascripts/*.js.*', 
       watched: true, 
       included: false, 
       served: false }, 
      'spec/javascripts/**/*_spec.coffee' 
     ], 


     // list of files to exclude 
     exclude: [ 
      'app/assets/javascripts/application.js.coffee.erb' 
     ], 


     // preprocess matching files before serving them to the browser 
     // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor 
     preprocessors: { 
      'app/**/*.*.coffee': ['coverage'] 
     }, 

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

     coverageReporter: { 
      type : 'lcovonly', 
      dir : 'coverage/', 
      subdir: 'javascript' 
     }, 

     'scripts': { 
      'test': './node_modules/.bin/karma start --single-run --browsers Firefox' 
     }, 

     // 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: ['Firefox'], 


     // Continuous Integration mode 
     // if true, Karma captures browsers, runs the tests and exits 
     singleRun: false 
    }); 
}; 

그리고있다 :

describe 'OrgTrainUser',() -> 
          factory = undefined 
          $httpBackend = undefined 
          beforeEach module('trackTrainApp') 
          beforeEach inject(($injector) -> 
               $httpBackend = $injector.get('$httpBackend'); 
               factory = $injector.get('OrgTrainUser'); 
              ) 
          it 'queries with username', 
          () -> 
           $httpBackend.expectGET('/lectures/123/users.json') 
           .respond([ { 
              id: '123', 
              first_name: 'test', 
              last_name: 'bob' 
              } ]) 
           result = factory.query({ id: '123' }) 

           $httpBackend.flush() 

           expect(result[0].id).toEqual('123') 

'use strict' 

angular.module('trackTrainApp') 
.factory('OrgTrainUser', 
      [ '$resource', ($resource) -> 
          user = $resource "/lectures/:id/users.json", 
              { 
               id: "@id" 
              }, 
              { 
               query: 
               method: "GET" 
               isArray: true 
               show: 
               method: 'GET' 
               isArray: true 
              } 

          user 
      ]) 

여기

npm test 

> [email protected] test /Users/bytenel/workspace/tracktrain 
> ./node_modules/.bin/karma start --single-run --browsers Firefox 

INFO [karma]: Karma v0.12.24 server started at http://localhost:9876/ 
INFO [launcher]: Starting browser Firefox 
ERROR [preprocessor.coverage]: Syntax error on line 7: indentation is ambiguous 
4 :  $document.ready(()-> 
5 :  $scope.loading = false; 
6 : ) 
7 : ]) 
^ :~~~~^ 
8 : 
9 : 
    at /Users/bytenel/workspace/tracktrain/app/assets/javascripts/controllers/root_controller.js.coffee 
ERROR [preprocessor.coverage]: Syntax error on line 66: indentation is ambiguous 
63 :              user.selected = false 
64 :              $scope.selectedUsers = [] 
65 :    ] 
66 :   ) 
^^ :~~~~~~~~~~~~^ 
    at /Users/bytenel/workspace/tracktrain/app/assets/javascripts/controllers/lecture_ctrl.js.coffee 
ERROR [preprocessor.coverage]: Syntax error on line 9: indentation is ambiguous 
6 :       user = $resource "https://stackoverflow.com/users/:id.json", { id: '@id' } 
7 : 
8 :       user 
9 :   ]) 
^ :~~~~~~~~~~~~~~^ 
    at /Users/bytenel/workspace/tracktrain/app/assets/javascripts/factories/user.js.coffee 
ERROR [preprocessor.coverage]: Syntax error on line 5, column 1: unexpected '\n' (\u000A) 
2 : 
3 : angular.module('trackTrainApp') 
4 : .factory('OrgTrainUser', 
5 :   [ '$resource', ($resource) -> 
^ :~^ 
6 :       user = $resource "/lectures/:id/users.json", 
7 :            { 
8 :            id: "@id" 
    at /Users/bytenel/workspace/tracktrain/app/assets/javascripts/factories/orgtrainuser.js.coffee 
ERROR [preprocessor.coverage]: Syntax error on line 9: indentation is ambiguous 
06 :               if $flashNotice[0] && $flashNotice[0].childNodes && $flashNotice[0].childNodes[3].id != 'flash_alert' 
07 :               $flashNotice.slideUp animationTime 
08 :               return; 
09 :              ), 2000; 
^^ :~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ 
10 : return;)(jQuery); 
    at /Users/bytenel/workspace/tracktrain/app/assets/javascripts/flashes.js.coffee 
ERROR [preprocessor.coverage]: Syntax error on line 17: indentation is ambiguous 
14 :   ajax: $.fn.dataTable.pipeline({ 
15 :            url: 'lectures/list.json', 
16 :            pages: 5 
17 :           }), 
^^ :~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ 
18 :   columns: [ 
19 :   { data: 'name' }, 
20 :   { data: 'start_date' }, 
    at /Users/bytenel/workspace/tracktrain/app/assets/javascripts/lectures.js.coffee 
ERROR [preprocessor.coverage]: Syntax error on line 20, column 2: unexpected '(DEDENT)' (\uEFFE) 
17 :  return attachmentEntry; 
18 : 
19 : 
20 : $('#add-attachment').on 'click', (event) -> 
^^ :~~^ 
21 :  event.preventDefault 
22 :  attachmentEntryCount = $('.attachment-entry').length 
23 : 
    at /Users/bytenel/workspace/tracktrain/app/assets/javascripts/training_history.js.coffee 
INFO [Firefox 32.0.0 (Mac OS X 10.9)]: Connected on socket dwjoowbAkz3xKEQ4pVCT with id 85121913 
WARN [web-server]: 404: /Users/bytenel/workspace/tracktrain/app/assets/javascripts/controllers/lecture_ctrl.js.js 
WARN [web-server]: 404: /Users/bytenel/workspace/tracktrain/app/assets/javascripts/factories/user.js.js 
WARN [web-server]: 404: /Users/bytenel/workspace/tracktrain/app/assets/javascripts/controllers/root_controller.js.js 
WARN [web-server]: 404: /Users/bytenel/workspace/tracktrain/app/assets/javascripts/factories/orgtrainuser.js.js 
WARN [web-server]: 404: /Users/bytenel/workspace/tracktrain/app/assets/javascripts/controllers/root_controller.js.js 
WARN [web-server]: 404: /Users/bytenel/workspace/tracktrain/app/assets/javascripts/controllers/lecture_ctrl.js.js 
WARN [web-server]: 404: /Users/bytenel/workspace/tracktrain/app/assets/javascripts/factories/user.js.js 
WARN [web-server]: 404: /Users/bytenel/workspace/tracktrain/app/assets/javascripts/factories/orgtrainuser.js.js 
Firefox 32.0.0 (Mac OS X 10.9) ERROR 
    SyntaxError: missing ; before statement 
    at /Users/bytenel/workspace/tracktrain/spec/javascripts/controllers/leture_ctrl_spec.coffee:1 

Firefox 32.0.0 (Mac OS X 10.9) ERROR 
    SyntaxError: missing ; before statement 
    at /Users/bytenel/workspace/tracktrain/spec/javascripts/factories/org_train_user_factory_spec.coffee:1 

Firefox 32.0.0 (Mac OS X 10.9) ERROR 
    SyntaxError: missing ; before statement 
    at /Users/bytenel/workspace/tracktrain/spec/javascripts/factories/user_factory_spec.coffee:1 


npm ERR! weird error 1 
npm ERR! not ok code 0 

내 karma.conf.js 파일입니다 : 여기

는 오류입니다 그리고 관련 오류 :

ERROR [preprocessor.coverage]: Syntax error on line 9: indentation is ambiguous 
06 :               if $flashNotice[0] && $flashNotice[0].childNodes && $flashNotice[0].childNodes[3].id != 'flash_alert' 
07 :               $flashNotice.slideUp animationTime 
08 :               return; 
09 :              ), 2000; 
^^ :~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ 
10 : return;)(jQuery); 

이 파일에서 엄격 모드를 사용하여 관련이있을 수 있습니까?

답변

0

카르마 코드 서비스는 brick 프로젝트로 제공됩니다. brick은 coffeescript 코드를 컴파일하고 계측합니다. brick에서 사용하는 컴파일러는 대신, brick는 우리의 프로젝트가 완벽하게 커피 스크립트 1.8으로 컴파일

커피 스크립트-REDUX라는 비 100 % 호환 컴파일러를 사용, 표준 커피 스크립트 컴파일러가 아니라 redux

컴파일 할 때 오류가 많이있다

ibrik 프로젝트와 redux 컴파일러는 잠시 동안 상대적으로 비활성 상태 였으므로 코드의 표지를 얻으려는 시도를 잊어 버렸습니다. 어쩌면 미래에 coffeescript-redux가 다시 출시되어 다시 karma-code-coverage 플러그인을 사용할 수 있습니다.

--------- UPDATE --------------

ibrik 프로젝트가 커피 스크립트를 사용하도록 업데이트되었지만, 카르마 커버리지 아직. 당신은 당신의 package.json을 해킹해서 작동 시키거나 카르마 커버리지를 기다릴 수 있습니다. 그러나 프로젝트에 두 개의 카르마 설정 파일이 있습니다. 처음에는 커버리지 (빠름 - 3 초)없이 실행하고 자바 스크립트는 거의 사용하지 않습니다. - 느린 십초)

확인 karma-coverage.conf.coffee

wiredep = require('wiredep') 
path = require('path') 

module.exports = (config) -> 
    config.set 
    frameworks: ['jasmine'] 

    files: wiredep(devDependencies: true)['js'].map (file) -> 
     path.relative(process.cwd(), file) 
    .concat [ 
     '.tmp/common/app.js' 
     '.tmp/common/services/helpers/**/*.js' 
     '.tmp/common/**/*.js' 
     '.tmp/app/**/*.js' 
     'src/common/**/*.spec.coffee' 
     'src/app/**/*.spec.coffee' 
     'test/spec/**/*.coffee' 
     # directives templates 
     'src/common/directives/**/*.html' 
     'src/app/components/**/*.html' 
     'bower_components/angular-strap/src/**/*.tpl.html' 
     # fixtures 
     { 
     pattern: 'test/fixtures/**/*.json' 
     watched: true 
     served: true 
     included: false 
     } 
    ] 

    exclude: [] 

    preprocessors: 
     'src/app/components/**/*.html': 'ng-html2js' 
     'bower_components/angular-strap/src/**/*.tpl.html': 'ng-html2js' 
     'src/common/**/*.spec.coffee': 'coffee' 
     'src/app/**/*.spec.coffee': 'coffee' 
     'test/spec/**/*.coffee': 'coffee' 
     '.tmp/**/*.js': 'coverage' 

    reporters: ['progress', 'html', 'coverage'] 

    ngHtml2JsPreprocessor: 
     stripPrefix: 'src/' 

    coverageReporter: 
     type: 'html', 
     dir: '.tmp/test/coverage/' 

    htmlReporter: 
     outputDir: '.tmp/test/html/' 

    coffeePreprocessor: 
     options: 
     bare: true 
     sourceMap: true 
     transformPath: (path) -> 
     return path.replace(/.js$/, '.coffee') 

    port: 9876 
    colors: true 
    logLevel: config.LOG_INFO 
    autoWatch: true 
    browsers: ['PhantomJS'] 
    singleRun: false 
+0

기본적으로 플러그인이 작동하지 않습니까? – noname

+0

기본적으로 .... 나는 커피에 대한 경멸을 이해하지 못한다. 그러나 열의가 사라져서 그동안 많은 죽은 프로젝트가 남아있는 것을 볼 수있다. –

+1

과열주기는 암캐입니다. 나에게 알려 줘서 고마워, 나는 그것이 컴파일러 문제라고 생각했다. 불행히도 플러그인을 제거해야 할 것입니다. – noname

2

나는 다음과 같은보고 싶은데 :

https://github.com/karma-runner/karma-coverage/issues/75, 특히 @의 제논의 의견을 참조하십시오. 카르마 커버리지로 표준 커피 스크립트를 구문 분석 할 수있는 분기 된 빌드가 있습니다. HBOCodeLabs의 Ibrik 포크를 사용하면 표준 coffeescript를 줄일 수 있습니다.당신이 당신의 dev에 종속

나를 위해 작동

karma-coverage": "git+https://github.com/kylewelsby/karma-coverage#fix-coffee-script-compiler"

에 다음을 추가 사용!

+0

도 나를 위해 일했습니다. –

관련 문제