2014-11-28 1 views
1

Я пытаюсь интегрировать свой текущий проект AngularJS с покрытием Protractor. Пожалуйста, найдите ниже package.json и мой транспортир-config.Испытания уклонатора успешно выполняются, но отчет о покрытии Protractor полностью пуст

Package.json

"devDependencies": { 
    "chromedriver": "~2.8.1", 
    "grunt": "~0.4.0", 
    "grunt-contrib-clean": "~0.4.0", 
    "grunt-contrib-copy": "~0.5.0", 
    "grunt-contrib-jshint": "~0.2.0", 
    "grunt-contrib-concat": "~0.1.3", 
    "grunt-contrib-uglify": "~0.1.1", 
    "grunt-contrib-watch": "~0.3.1", 
    "grunt-html2js": "~0.1.0", 
    "grunt-karma": "~0.4.4", 
    "grunt-protractor-runner": "~1.1.4", 
    "grunt-contrib-less": "~0.11.3", 
    "grunt-shell": "~0.6.0", 
    "selenium": "~2.20.0", 
    "grunt-protractor-coverage": "^0.2.1", 
    "grunt-istanbul": "^0.2.5", 
    "grunt-express-server": "~0.4.5", 
    "protractor": "~1.4.0", 
    "grunt-contrib-connect": "~0.7.1" 
    } 

транспортир Config

exports.config = { 

    seleniumServerJar: '../../node_modules/selenium/lib/runner/selenium-server-standalone-2.20.0.jar', 
    chromeDriver: '../../node_modules/chromedriver/lib/chromedriver/chromedriver', 
    baseUrl: 'http://localhost:3000/', 

    capabilities: { 
     'browserName': 'chrome', 
     'chromeOptions': { 
      'args': ['incognito', 'disable-extensions', 'start-maximized'] 
     } 
    }, 

    onPrepare: function() { 
     exports.server = require('../../server.js'); 
    }, 

    specs: ['../e2e/**/*.spec.js'], 

    jasmineNodeOpts: { 
     onComplete: function() {}, 
     isVerbose: true, 
     showColors: true, 
     includeStackTrace: true, 
     defaultTimeoutInterval: 90000 
    } 
}; 

Мои задачи Грунт

grunt.registerTask('test', ['clean:coverage', 'copy:instrument', 'instrument', 'protractor_coverage:chrome', 'makeReport']); 

    copy: { 
     instrument: { 
      files: [{ 
       src: ['src/app/**/*', '!src/app/**/*.js'], 
       dest: 'coverage/e2e/instrumented/' 
      }] 
     }, 
    }, 

    clean: { 
     coverage: ['coverage', 'instrumented', 'reports'] 
    } 


    instrument: { 
     files: 'src/app/**/*.js', 
     options: { 
      lazy: true, 
      basePath: 'coverage/e2e/instrumented' 
     } 
    }, 

    makeReport: { 
     src: 'coverage/e2e/instrumented/*.json', 
     options: { 
      type: 'lcov', 
      dir: 'coverage/e2e/reports', 
      print: 'detail'    
     } 
    }, 


    protractor_coverage: { 
     options: { 
      configFile: 'test/config/protractor-config.js', // Default config file 
      keepAlive: true, // If false, the grunt process stops when the test fails. 
      noColor: false, // If true, protractor will not use colors in its output. 
      coverageDir: 'coverage/e2e/instrumented', 
      args: {} 
     }, 
     chrome: { 
      options: { 
       args: { 
        baseUrl: 'http://localhost:3000/', 
        // Arguments passed to the command 
        'browser': 'chrome' 
       } 
      } 
     }, 
    }, 

При попытке т o запустить задачу grunt, все тесты выполняются успешно, но отчет о покрытии транспортира полностью пуст. Я пробовал несколько вариантов, но я не могу заставить отчеты появляться.

enter image description here

Вопрос: Могу ли я сделать что-то здесь не так? Как сделать покрытие транспортира для загрузки файлов src js?

+1

Вы можете иметь вид в вашем покрытия/e2e/инструментированного папку, чтобы увидеть, если ваш * .js файлы становятся intstrumented? Если они есть, вы увидите в них много уродливого кода. Вы должны настроить приложение для загрузки этих файлов вместо обычных. Как только это будет работать, проверьте их в своем отладчике браузера, что ваши тесты на самом деле используют инструментальные файлы. В зависимости от вашего сервера/бэкэнд это можно сделать разными способами. Если вы используете узел, я бы рекомендовал проверить и запустить образец приложения, которое упаковано с кодом Protractor Coverage. – Carl

+0

Да, файлы * .js обрабатываются, и код выглядит миниатюрным. Мы используем зависимость «хрюк-транспортир-охват». Но мы получаем предупреждение «Без покрытия в браузере» на консоли при запуске «теста на ворчание». –

+0

Возможно, ваш сервер покрытия не запускается. попробуйте добавить опцию run: {} до конца вашей задачи: Код в блоке ответа, следующий после этого сообщения – Carl

ответ

1

Вы могли бы попытаться добавить бег {}, как показано ниже:

protractor_coverage: { 
    options: { 
     ...... 
    }, 
    chrome: { 
     ...... 
    }, 
    run: {} 
}, 
+0

Да. Мы попробовали запустить: {}. Но все же мы получаем предупреждение «Без покрытия в браузере» в консоли.Также отчет пуст. –

+0

Не могли бы вы рассказать о том, как подключить/запустить сервер покрытия? –

+0

Спасибо за ваши полезные предложения, и мы успешно сгенерировали отчет. –

4

Некоторые фантастический человек здесь есть хак, который работал для меня (http://javahow.net/questions/22350680/code-coverage-for-protractor-tests-in-angularjs)

В основном вы добавляете тест e2e, что выписывает собранное покрытие из браузера, что-то вроде этого:

'use strict'; 

var fs = require('fs'); 

describe('Output the code coverage objects', function() { 
    it('should output the coverage object.', function() { 
    browser.driver.executeScript("return __coverage__;").then(function(val) { 
     fs.writeFileSync("coverage/e2e/coverageE2E.json", JSON.stringify(val)); 
    }); 
    }); 
}); 

Я отправил это решение для этого вопроса, а также в случае, если это помогает им тоже: Protractor coverage not generating report

1

просто хочу добавить к запросу simonvandyk. Переменная покрытия не покрытие. Вместо этого, по-видимому, дата/время добавляется по умолчанию. То, что вам нужно сделать, - установить переменную покрытия в вашем файле grunt, по заданию инструмента, добавить покрытиеVariable, как показано ниже.

instrument: { 
 
     files: ['js/*.js'], 
 
     options: { 
 
      lazy: true, 
 
      basePath: "./instrumented", 
 
      coverageVariable: '__coverage__' //<<--- sets it to specific value 
 
     } 
 
    },

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

  • Нет связанных вопросов^_^