Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tests(JS): Mise en place tests unitaires et couverture pour code JS/TS #43

Merged
merged 18 commits into from
May 12, 2020

Conversation

adrienjoly
Copy link

@adrienjoly adrienjoly commented May 11, 2020

Pierre et moi allons ajouter des tests unitaires aux fonctions JavaScript employées par le map-reduce exécuté sur MongoDB, et nous voulons mesurer l'évolution de la couverture du code par ces tests.

À cette fin, je propose dans cette PR:

  • l'intégration du service Codacy (gratuit pour les dépôts open source) pour suivre l'évolution de la couverture
  • l'usage de istanbul/nyc pour générer le rapport de couverture lors de l'exécution des tests JS/TS
  • l'usage d'Ava et ava-ts pour écrire et exécuter nos tests unitaires en TypeScript sans nécessiter de transpilation
  • et l'exécution automatique des tests avec mesure de couverture sur l'environnement de CI

Pour tester ces nouvelles fonctions:

$ cd dbmongo/js
$ nvm use
$ npm install
$ npm test
$ npm run test:coverage
$ rm -rf ./coverage

...et, quand cette PR sera fusionnée dans master, nous pourrons suivre l'évolution de la couverture des tests depuis cette page: https://app.codacy.com/gh/signaux-faibles/opensignauxfaibles/dashboard

@adrienjoly adrienjoly self-assigned this May 11, 2020
@adrienjoly adrienjoly added the enhancement New feature or request label May 11, 2020
@@ -1,6 +1,8 @@
.*
!.github
!.gitignore
!dbmongo/js/.nvmrc
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ce fichier contient le numéro de version de Node.js nécessaire pour que les nouveaux tests puissent s'exécuter.

Depuis le répertoire dbmongo/js, il suffit de taper nvm use pour utiliser cette version. (voir nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to manage multiple active node.js versions)

@@ -1,6 +1,8 @@
.*
!.github
!.gitignore
!dbmongo/js/.nvmrc
!dbmongo/js/.nycrc
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ce fichier contient la configuration de Istanbul/nyc, l'outil qui permet de générer un rapport de couverture (coverage) lors de l'exécution des tests JavaScript/TypeScript.

"test": "test"
},
"scripts": {
"test": "ava-ts **/*_tests.ts",
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pour exécuter ces tests, il suffit de taper npm test depuis dbmongo/js.

@@ -260,3 +260,7 @@ function map () {
}
}
}

try {
module.exports.map = map
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cette ligne est nécessaire pour que la fonction soit visible après son importation dans un test exprimé en TypeScript, mais elle est incompatible avec jsc.

=> Solution choisie: essayer d'exporter la fonction pour TypeScript, et faire retirer ce bloc par jsLoad lors du bundling. (cf https://github.com/signaux-faibles/opensignauxfaibles/pull/43/files#diff-a688410c05f14479ef1f74e809527503R53)

@adrienjoly adrienjoly changed the title tests(JS): Setup unit tests and coverage tracking Ava tests(JS): Mise en place tests unitaires et couverture pour code JS/TS May 11, 2020
@adrienjoly adrienjoly marked this pull request as ready for review May 11, 2020 15:34
@adrienjoly
Copy link
Author

adrienjoly commented May 11, 2020

Pour info, avant de décider d'utiliser Node et Ava-ts, j'avais considéré deux autres solutions. Voici mes notes d'évaluation de ces solutions:

Solutions pour refactorer et tester fichiers JS/TS

Deno

Liens

PROs

  • officially scheduled for release on May 13 (1)
  • security: no access to I/O by default (1)
  • has a standard library based loosely on the one provided by Golang (1)
  • uses strict mode by default => alert user about sloppy coding practices (1)
  • built-in test runner (1)
  • built-in code formatting, following Prettier 2.0 rules (1)
  • deno bundle to generate a JS bundle + source map from TS files (1)

CONs

Questions ouvertes (TODO)

  • can we quickly run our JS tests and re-generate our jsFunctions bundle with Deno?

Rome

Liens

PROs

CONs

  • still experimental => ⚠️ not suitable for production yet (1)
  • must be built from source + runs on top of Node.js (2)
  • documentation is very minimalistic (2)

Jest ?

Ma confiance en Jest est relative, pour les raisons suivantes:

@adrienjoly adrienjoly merged commit 67e8159 into master May 12, 2020
@adrienjoly adrienjoly deleted the tests/js-try-ava branch May 12, 2020 08:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant