|
|
Dans cette page je vais détailler le processus d'obtention de données de couverture des tests QUnit en utilisant [Karma](https://www.npmjs.com/package/karma).
|
|
|
|
|
|
## Prerequis
|
|
|
|
|
|
- Ouvrir un terminal au niveau de votre projet
|
|
|
|
|
|
- Installer Karma
|
|
|
```
|
|
|
npm install karma
|
|
|
alias karma='nodejs node_modules/karma/bin/karma'
|
|
|
```
|
|
|
|
|
|
- Installer qunit et dépendances
|
|
|
```
|
|
|
npm install qunitjs
|
|
|
npm install karma-qunit #permet de charger les dépendances qunit depuis karma
|
|
|
```
|
|
|
|
|
|
- Installer sinon.js et dépendances, si usage de sinon.js
|
|
|
```
|
|
|
npm install sinon
|
|
|
npm install sinon-qunit #vous n'avez plus à utiliser le fichier sinon-qunit-2.0.1 que je vous ai mis à disposition
|
|
|
npm install karma-qunit #permet de charger les dépendances qunit depuis karma
|
|
|
npm install karma-sinon
|
|
|
```
|
|
|
|
|
|
- Installer coverage
|
|
|
```
|
|
|
npm install karma-coverage #permettent de réaliser des mesures de couverture sur les tests
|
|
|
```
|
|
|
|
|
|
- Installer lanceurs de navigateurs
|
|
|
```
|
|
|
npm install karma-firefox-launcher
|
|
|
npm install karma-chrome-launcher
|
|
|
npm install karma-phantomjs-launcher
|
|
|
```
|
|
|
## Exécuter des tests QUnit
|
|
|
|
|
|
- Afin d’exécuter les tests en utilisant Karma, il faut définir un fichier karma.conf.js dans lequel vous configurez l'exécution de tests qunit :
|
|
|
|
|
|
```
|
|
|
|
|
|
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: ['qunit'], //remplacer par frameworks: ['qunit','sinon'] - si usage de sinon
|
|
|
|
|
|
|
|
|
// list of files / patterns to load in the browser
|
|
|
files: [
|
|
|
'src/*.js',
|
|
|
'test/money_test.js'
|
|
|
],
|
|
|
|
|
|
|
|
|
// list of files to exclude
|
|
|
exclude: [
|
|
|
],
|
|
|
|
|
|
|
|
|
// preprocess matching files before serving them to the browser
|
|
|
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
|
|
|
preprocessors: {
|
|
|
'src/*.js':['coverage']
|
|
|
},
|
|
|
|
|
|
|
|
|
// test results reporter to use
|
|
|
// possible values: 'dots', 'progress'
|
|
|
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
|
|
|
reporters: ['progress','coverage'],
|
|
|
coverageReporter: { type: 'lcov', dir: 'reports', subdir: 'coverage'},
|
|
|
|
|
|
// 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_DEBUG,
|
|
|
|
|
|
|
|
|
// 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: true,
|
|
|
|
|
|
// Concurrency level
|
|
|
// how many browser should be started simultaneous
|
|
|
concurrency: Infinity
|
|
|
})
|
|
|
}
|
|
|
```
|
|
|
- le fichier karma.conf.js peut être partiellement généré par la commande suivante
|
|
|
```
|
|
|
$ karma init karma.conf.js
|
|
|
```
|
|
|
|
|
|
- Si vous tests redéfinissent la méthode window.alert vous devriez les ré-écrire partiellement, car la function window.alert est utilisée par Karma. Pour éviter tout effet de bord:
|
|
|
- sauvegarder le contenu de window.alert avant re-définir.
|
|
|
- ré-définir à votre convenant la fonction window.alert
|
|
|
- après avoir réalise le traitement spécifique de votre test, remettez window.alert à son contenu initial
|
|
|
```
|
|
|
var old_alert=window.alert;
|
|
|
window.alert=function(){...};
|
|
|
//appels provoquant la levée des alertes
|
|
|
...
|
|
|
|
|
|
//re-mettre en place la version normale de window.alert
|
|
|
window.alert=old_alert;
|
|
|
|
|
|
//assertions ou autres
|
|
|
assert.ok(...);
|
|
|
```
|
|
|
|
|
|
- Si vos tests alterent la méthode window.alert en lui associant un spy ou un stub, vous devez penser à rétablir la fonction à son état initial .restore()
|
|
|
```
|
|
|
sinon.spy(window,"alert");
|
|
|
|
|
|
...
|
|
|
//assertions ou autres
|
|
|
assert.ok(window.alert.calledOnce);
|
|
|
...
|
|
|
//rétablir l'état initial
|
|
|
window.alert.restore();
|
|
|
```
|
|
|
|
|
|
- Il n'y a pas de support pour l'intégration automatique de qunit-composite (pas de karma-qunit-composite)
|
|
|
- impossible de tester money_test_suites.js
|
|
|
|
|
|
## Obtenir des données de couverture
|
|
|
|
|
|
Afin d'obtenir les données de couverture plusieurs étapes doivent être réalisées :
|
|
|
- instrumenter le code .js de telle sorte à ce que lors de l'exécution des traces soit générées. La tâche "preprocessing" doit être configurée dans ce sens. Dans le code ci-dessus on instrumente le code .js qui se trouve dans le dossier "src" (src: 'src/*.js'). Si besoin, renommer le filtre pour qu'il reflète la structure de votre code (par exemple, src: 'js/*.js').
|
|
|
- exécuter les tests, en remplaçant les sources .js avec les sources instrumentées. Afin de faciliter ce processus, nous pouvons faire usage des packages nodejs de générer des serveurs à la volée et d'éxecuter les scripts dans un environement ou les sources js sont associées aux sources instrumentées.
|
|
|
|
|
|
- l'exécution de tests se réalise avec la commande
|
|
|
```
|
|
|
$ karma start # lance le serveur de tests + exécute les tests + selon singleRun arrête ou non le serveur de tests
|
|
|
ou
|
|
|
$ karma run # si serveur de tests karma n'a pas été arrêté
|
|
|
```
|
|
|
|
|
|
- Par la suite, les tests qunit s'exécutent et des traces d'exécution sont gardées en ___reports/coverage___
|
|
|
- Des données de couverture au format LCOV (pour compatibilité sonar) sont également générées ___reports/coverage/lcov.info___
|
|
|
|
|
|
= Intégration des données de couverture en Sonar
|
|
|
|
|
|
Mettez à jour le fichier sonar-project.properties pour indiquer que les données de couverture se retrouvent dans .tmp/coverage/reports/lcov.info
|
|
|
|
|
|
```
|
|
|
...
|
|
|
sonar.javascript.lcov.reportPath=reports/coverage/lcov.info
|
|
|
```
|
|
|
|
|
|
Relancez sonar-runner |
|
|
\ No newline at end of file |