Jeg foretrækker kode opdelt i overskuelige dele med et tydeligt ansvar. Det gør det lettere at finde den relevante kode, forstå en ændring og afprøve dens konsekvenser.
Små filer er ikke et mål i sig selv. Hvis man skal åbne mange filer for at forstå en enkel handling, kan opdelingen være gået for langt. Det afgørende er, om sammenhængen er til at følge.
Tests skal hjælpe os med at opdage fejl
Efter en kodeændring kører jeg de relevante tests og undersøger fejlene, før arbejdet betragtes som afsluttet. Det er vigtigt, hvad testene kontrollerer: Et grønt resultat er kun nyttigt, hvis testene kan opdage de problemer, vi er bekymrede for.
Testdækning viser, hvilke dele af koden der bliver kørt under test. Den fortæller ikke alene, om løsningen er korrekt, eller om alle vigtige situationer er undersøgt.
Læs tallene sammen med koden
I rapporten nedenfor er den samlede linjedækning 98,76 %, dækningen af forgreninger 93,35 % og funktionsdækningen 98,01 %. Nogle filer ligger lavere. Rapporten dokumenterer derfor ikke 100 % dækning af hele systemet.
Den oprindelige note skrev “Linje coverage 100% altid”. Det var for kategorisk og stemte ikke med det viste resultat. Jeg bruger dækningen til at finde steder, der bør undersøges, og vurderer manglerne i forhold til den konkrete opgave og risiko.
For mig hænger forståelig kode og brugbare tests sammen: Det skal være lettere at se, hvad en del gør, og at kontrollere, at den stadig gør det efter en ændring.
Teknisk bilag: den oprindelige testrapport
ℹ start of coverage report
ℹ ------------------------------------------------------------------------------------------------------------------------------------------
ℹ file | line % | branch % | funcs % | uncovered lines
ℹ ------------------------------------------------------------------------------------------------------------------------------------------
ℹ core | | | |
ℹ admin-contributions | | | |
ℹ admin-columns-normalize-v1.js | 100.00 | 99.11 | 100.00 |
ℹ admin-row-actions-normalize-v1.js | 100.00 | 97.75 | 100.00 |
ℹ admin-toolbar-normalize-v1.js | 100.00 | 86.67 | 100.00 |
ℹ entity-surface-v1.js | 100.00 | 96.74 | 100.00 |
ℹ inline-admin-form-mutation-v1.js | 100.00 | 100.00 | 100.00 |
ℹ kinds.js | 100.00 | 100.00 | 100.00 |
ℹ menu-point-v1.js | 100.00 | 90.91 | 100.00 |
ℹ page-table-v1.js | 100.00 | 98.57 | 100.00 |
ℹ page-v1.js | 100.00 | 100.00 | 100.00 |
ℹ page-widget-v1.js | 100.00 | 93.75 | 100.00 |
ℹ resource-editor-list-v1.js | 100.00 | 96.55 | 100.00 |
ℹ resource-editor-v1.js | 100.00 | 100.00 | 100.00 |
ℹ settings-element-fields.js | 100.00 | 94.68 | 100.00 |
ℹ settings-element-list.js | 100.00 | 90.77 | 100.00 |
ℹ settings-element-v1.js | 100.00 | 100.00 | 100.00 |
ℹ shared.js | 100.00 | 86.21 | 100.00 |
ℹ widget-v1.js | 100.00 | 98.18 | 100.00 |
ℹ server.js | 100.00 | 77.48 | 93.10 |
ℹ src | | | |
ℹ admin-http-client-limit.js | 100.00 | 81.82 | 100.00 |
ℹ admin-http-table-query.js | 100.00 | 100.00 | 100.00 |
ℹ admin-secret-fields-meta.js | 100.00 | 82.93 | 100.00 |
ℹ admin-secret-fields.js | 100.00 | 86.49 | 85.71 |
ℹ admin-views-menu-sections.js | 100.00 | 100.00 | 100.00 |
ℹ admin-views-menu.js | 100.00 | 100.00 | 88.89 |
ℹ admin-views-registry-filter.js | 100.00 | 94.87 | 100.00 |
ℹ admin-views-visible-menu-points.js | 100.00 | 100.00 | 100.00 |
ℹ admin-views.js | 100.00 | 82.05 | 100.00 |
ℹ auth-gate.js | 75.68 | 73.33 | 80.00 | 12-18 48-56 60-61 68-69 82-86 91-92
ℹ auth.js | 100.00 | 100.00 | 100.00 |
ℹ docker-db-host-override.js | 100.00 | 82.61 | 100.00 |
ℹ events-bus.js | 100.00 | 97.18 | 85.71 |
ℹ filters-pipeline.js | 100.00 | 98.39 | 100.00 |
ℹ host-logger.js | 100.00 | 85.71 | 100.00 |
ℹ host-runtime-delegates.js | 100.00 | 100.00 | 100.00 |
ℹ http-invocation-context.js | 100.00 | 100.00 | 100.00 |
ℹ http-route-debug.js | 100.00 | 79.25 | 91.67 |
ℹ in-process-exclusive-queue.js | 100.00 | 100.00 | 75.00 |
ℹ intl-format-node.js | 100.00 | 81.82 | 100.00 |
ℹ is-plain-object.js | 100.00 | 100.00 | 100.00 |
ℹ lifecycle-errors.js | 100.00 | 66.67 | 100.00 |
ℹ lifecycle.js | 100.00 | 89.80 | 94.44 |
ℹ minimal-settings-bootstrap.js | 100.00 | 92.00 | 100.00 |
ℹ normalize-auth-base-path.js | 100.00 | 100.00 | 100.00 |
ℹ oauth-start-tenant-resolve.js | 100.00 | 96.55 | 100.00 |
ℹ openapi-from-registry-routes.js | 100.00 | 83.33 | 100.00 |
ℹ pagination-cursor.js | 100.00 | 97.01 | 100.00 |
ℹ payload-schema-validator.js | 100.00 | 100.00 | 100.00 |
ℹ permission-provider-binding.js | 100.00 | 94.12 | 100.00 |
ℹ permission-resolve.js | 89.58 | 90.91 | 100.00 | 83-95 171-182
ℹ platform-admin-permissions.js | 100.00 | 71.43 | 100.00 |
ℹ plugin-activation-validate.js | 100.00 | 97.06 | 100.00 |
ℹ plugin-api | | | |
ℹ _phase.js | 100.00 | 100.00 | 100.00 |
ℹ admin.js | 100.00 | 100.00 | 100.00 |
ℹ auth.js | 100.00 | 100.00 | 100.00 |
ℹ cross.js | 100.00 | 92.86 | 100.00 |
ℹ host-boundaries.js | 100.00 | 100.00 | 100.00 |
ℹ index.js | 100.00 | 100.00 | 94.12 |
ℹ invocation.js | 100.00 | 100.00 | 100.00 |
ℹ lifecycle.js | 100.00 | 100.00 | 100.00 |
ℹ operator-hub.js | 100.00 | 100.00 | 100.00 |
ℹ permissions.js | 100.00 | 100.00 | 100.00 |
ℹ platform.js | 100.00 | 100.00 | 100.00 |
ℹ plugin-logger.js | 100.00 | 95.45 | 100.00 |
ℹ routes.js | 100.00 | 100.00 | 100.00 |
ℹ secrets.js | 100.00 | 97.44 | 100.00 |
ℹ services-registry.js | 100.00 | 100.00 | 100.00 |
ℹ telemetry.js | 100.00 | 100.00 | 100.00 |
ℹ workers.js | 100.00 | 100.00 | 100.00 |
ℹ plugin-conformance-helpers.js | 100.00 | 80.56 | 100.00 |
ℹ plugin-contract.js | 100.00 | 99.12 | 100.00 |
ℹ plugin-dependents.js | 100.00 | 100.00 | 100.00 |
ℹ plugin-loader.js | 100.00 | 98.31 | 100.00 |
ℹ plugin-runtime-metadata.js | 100.00 | 85.71 | 100.00 |
ℹ prefs.js | 100.00 | 97.78 | 100.00 |
ℹ public-shell-html.js | 100.00 | 68.18 | 100.00 |
ℹ public-shell-resolve.js | 100.00 | 85.71 | 100.00 |
ℹ registry-admin-handlers.js | 100.00 | 97.96 | 100.00 |
ℹ registry-data-query-controls.js | 100.00 | 94.49 | 100.00 |
ℹ registry-datastore-handlers.js | 100.00 | 100.00 | 85.71 |
ℹ registry-docs-handlers.js | 100.00 | 96.77 | 100.00 |
ℹ registry-factory.js | 100.00 | 95.65 | 100.00 |
ℹ registry-pref-handlers.js | 100.00 | 100.00 | 100.00 |
ℹ registry-route-documentation-meta.js | 100.00 | 95.83 | 100.00 |
ℹ registry-route-handlers.js | 100.00 | 95.97 | 100.00 |
ℹ registry-service-handlers.js | 100.00 | 98.25 | 100.00 |
ℹ registry.js | 100.00 | 100.00 | 100.00 |
ℹ resolve-database-datastore.js | 100.00 | 93.75 | 100.00 |
ℹ resolve-secret-ref.js | 88.14 | 97.14 | 100.00 | 31-37
ℹ restart-controller.js | 100.00 | 100.00 | 100.00 |
ℹ retention-helpers.js | 100.00 | 100.00 | 100.00 |
ℹ route-exposure-bind.js | 100.00 | 91.49 | 100.00 |
ℹ run-handlers.js | 100.00 | 86.67 | 100.00 |
ℹ schema-only-dependencies.js | 100.00 | 100.00 | 100.00 |
ℹ secrets.js | 100.00 | 100.00 | 100.00 |
ℹ server-boot-report-diagnostics.js | 72.99 | 39.29 | 100.00 | 71-74 94-96 101-104 106-108 118-120 125-128 130-132 156-173…
ℹ server-boot-report-rbac-probe.js | 86.29 | 58.82 | 80.00 | 50-51 60-68 70-71 102-105
ℹ server-boot-report.js | 99.28 | 86.79 | 100.00 | 110-111
ℹ server-builtins.js | 100.00 | 100.00 | 100.00 |
ℹ server-http-admin-routes.js | 100.00 | 92.05 | 100.00 |
ℹ server-http-slo.js | 100.00 | 83.33 | 100.00 |
ℹ server-http.js | 100.00 | 98.00 | 100.00 |
ℹ server-permissions.js | 100.00 | 100.00 | 100.00 |
ℹ server-start-helpers.js | 100.00 | 100.00 | 100.00 |
ℹ ServerClass.js | 100.00 | 85.45 | 100.00 |
ℹ settings-file.js | 100.00 | 93.48 | 100.00 |
ℹ settings-secrets.js | 100.00 | 100.00 | 100.00 |
ℹ settings-store.js | 100.00 | 96.67 | 80.00 |
ℹ settings.js | 100.00 | 100.00 | 100.00 |
ℹ static-mount.js | 100.00 | 91.67 | 100.00 |
ℹ tenant-context.js | 100.00 | 100.00 | 100.00 |
ℹ tenant-plugin-gate-bearer-probe.js | 100.00 | 94.74 | 66.67 |
ℹ tenant-plugin-gate-features.js | 100.00 | 90.91 | 100.00 |
ℹ tenant-plugin-gate-http.js | 100.00 | 83.93 | 80.00 |
ℹ tenant-plugin-gate-policy.js | 100.00 | 94.23 | 100.00 |
ℹ tenant-plugin-gate-registry-snapshot.js | 100.00 | 100.00 | 100.00 |
ℹ tenant-plugin-gate-resolve.js | 100.00 | 92.86 | 100.00 |
ℹ tenant-plugin-gate-static.js | 100.00 | 94.12 | 100.00 |
ℹ tenant-prefs.js | 100.00 | 100.00 | 100.00 |
ℹ unavailable-service.js | 100.00 | 96.67 | 100.00 |
ℹ worker-plugin-filter.js | 100.00 | 95.12 | 100.00 |
ℹ worker-skill-registry.js | 100.00 | 100.00 | 100.00 |
ℹ workflow-tenant-enforcement.js | 100.00 | 100.00 | 100.00 |
ℹ ------------------------------------------------------------------------------------------------------------------------------------------
ℹ all files | 98.76 | 93.35 | 98.01 |
ℹ ------------------------------------------------------------------------------------------------------------------------------------------
ℹ end of coverage report