testCoverage.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. const fs = require('fs')
  2. const SKIP_FOLDERS = [
  3. {
  4. pattern: 'smart',
  5. reason: 'No smart components testing yet',
  6. },
  7. {
  8. pattern: 'AssessmentModule',
  9. reason: 'Assessment module is not in use for now',
  10. },
  11. ]
  12. const main = async () => {
  13. let coveredComponents = 0
  14. let uncoveredComponents = 0
  15. let skippedComponents = 0
  16. const skippedMessageLog = []
  17. const readDir = async dir => {
  18. const exists = fs.existsSync(`${dir}/package.json`)
  19. if (exists) {
  20. const skippedPattern = SKIP_FOLDERS.find(skip => dir.includes(`/${skip.pattern}/`))
  21. if (skippedPattern) {
  22. skippedComponents += 1
  23. if (!skippedMessageLog.find(skip => skip.pattern === skippedPattern.pattern)) {
  24. skippedMessageLog.push(skippedPattern)
  25. }
  26. return
  27. }
  28. const files = await fs.promises.readdir(dir)
  29. const tsxFiles = files.filter(file => file.endsWith('.tsx') && !file.endsWith('.spec.tsx'))
  30. const specFiles = files.filter(file => file.endsWith('.spec.tsx'))
  31. if (tsxFiles.length > 0 && specFiles.length === 0) {
  32. uncoveredComponents += 1
  33. console.log(`\x1b[31m${dir}\x1b[0m`)
  34. } else if (tsxFiles.length > 0 && specFiles.length > 0) {
  35. coveredComponents += 1
  36. }
  37. } else {
  38. const files = await fs.promises.readdir(dir, { withFileTypes: true })
  39. for (const file of files) {
  40. if (file.isDirectory()) {
  41. await readDir(`${dir}/${file.name}`)
  42. }
  43. }
  44. }
  45. }
  46. await readDir('./src')
  47. skippedMessageLog.forEach(skip => console.log(`Skipping '${skip.pattern}' pattern. ${skip.reason}`))
  48. const percentage = (coveredComponents / (coveredComponents + uncoveredComponents)) * 100
  49. console.log(`\nSkipped components: ${skippedComponents}`)
  50. console.log(`Covered components: ${coveredComponents} / ${coveredComponents + uncoveredComponents}`)
  51. console.log(`\x1b[34mCoverage: ${percentage.toFixed(2)} %\x1b[0m`)
  52. }
  53. main()