0

Я думаю, что что-то может быть неправильно с препроцессором покрытия кода Karma CoffeeScript. Или я не уверен, что я делаю неправильно! Поэтому я прихожу к вам в StackOverflow. В основном я пытаюсь настроить свой набор тестов кармы, чтобы дать мне код в формате lcov, поэтому я могу отправить его в CodeClimate. У меня было так, что мой тестовый набор (используется) работал, но теперь я не могу ничего извлечь из него, кроме ошибок. Мой проект - это проект Rails, и файлы настроены на предварительную обработку в канале активов (например, файлы name.js.coffee), но если я включу их в препроцессор покрытия, кажется, что он препроцессор их просто отлично, НО он выдает ошибку на каждый файл. Например, что-то будет обработано функцией, и будет сказано, что функция является зарезервированным словом и т. Д. Поэтому она все еще думает, что они являются файлами coffeescript, которые я угадываю и использую этот синтаксис соответствующим образом. Когда я просто пытаюсь обработать их с помощью препроцессора coffeescript, хотя я получаю ошибки coffeescript, где их не должно быть. Помогите?Карма и CoffeScript и покрытие кода

Вот ошибки:

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 файл:

// 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 
    }); 
}; 

А вот пример спецификации и JS файл:

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 
      ]) 

И связанная с этим ошибка:

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

Karma code coverage powered by brick project. brick компилирует и записывает код coffeescript. Компилятор используется brick не стандартный CoffeeScript компилятор, вместо этого, brick использует не 100% совместимый компилятор под названием CoffeeScript-перевождь

Наш проект прекрасно составленный CoffeeScript 1.8, но имеет много ошибок при компиляции с redux

Проект ibrik и составители redux были относительно бездействующими, поэтому мы просто забыли о наших попытках получить обложку нашего кода. Возможно, в будущем, с возобновлением coffeescript-redux, мы можем снова использовать плагин karma-code-coverage.

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

Проект Ибрик был обновлен для использования coffescript, но пока карма-покрытие не. Вы можете взломать ваш пакет.json, чтобы заставить его работать или ждать карма-покрытия, исправьте его, однако у меня есть два конфигурационных файла кармы в моем проекте, сначала для запуска без покрытия (быстрая - 3 секунды), а во-вторых, чтобы охватить javascript (немного медленнее - 10 секунд)

Проверить 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 см комментарий @ Зенона в частности. Существует разветвленная сборка, которая позволяет охвату кармы анализировать стандартный сценарий кофе. Он делает это, используя вилку Ibrik HBOCodeLabs, которая отключает сокращение для стандартного coffeescript.Для использования необходимо добавить следующие строки в зависимости Дева

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

Это работает для меня!

+0

тоже работал для меня –

Смежные вопросы