CI og Testing - aTrueYety/idatt2106-2025-09-backend GitHub Wiki
Denne siden dokumenterer hvordan kontinuerlig integrasjon (CI), testing og kodekvalitet er satt opp i backend-prosjektet.
- CI-verktøy: GitHub Actions
-
Testing: JUnit 5 + Mockito + Spring Boot (
@JdbcTest
) -
Dekning: JaCoCo (
mvn verify
) - Kodekvalitet: Google Checkstyle
GitHub Actions kjører tre jobber ved PR til main
eller dev
:
on:
pull_request:
branches:
- main
- dev
Jobb | Beskrivelse | Kommando |
---|---|---|
build |
Kompilerer prosjektet | mvn clean compile |
test |
Kjører enhetstester og integrasjonstester | mvn test |
checkstyle |
Kjør Checkstyle med Google-sjekker | mvn checkstyle:check |
- Bruker
Mockito
ogJUnit 5
- Eksempel:
ExtraResidentServiceTest.java
- Bruker
@JdbcTest
med import av egne JDBC-repositories - Bruker
application-test.properties
- Eksempel:
ExtraResidentServiceIntegrationTest.java
- Bruker
Cypress
- Bruker
application-test.properties
med H2-database - Eksempel:
register.cy.ts
- Ler mer om E2E-tester under Frontend
# application-test.properties
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;MODE=MySQL
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.sql.init.mode=always
spring.flyway.enabled=true
spring.flyway.locations=classpath:db/migration
spring.flyway.baseline-on-migrate=true
flyway.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
flyway.user=sa
flyway.password=
spring.flyway.placeholders.alter_column=ALTER COLUMN
spring.flyway.placeholders.rename_column_start=RENAME COLUMN
spring.flyway.placeholders.rename_column_end=
# application-test-e2e.properties
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.mail.MailSenderAutoConfiguration
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.url=jdbc:h2:mem:testdb;MODE=MySQL;
spring.mail.username=dummy
spring.flyway.default-schema=PUBLIC
- Enhetester og integrasjonstester kan kjøres lokalt med Maven:
mvn test
- Dekning genereres ved:
mvn verify
- Rapporter i:
target/site/jacoco/index.html
- Følgende pakker er ekskludert:
<exclude>**/model/**</exclude> <exclude>**/config/**</exclude>
- Bruker
google_checks.xml
viamaven-checkstyle-plugin
hos VSCode - Automatisk kjørt i
verify
-fase og CI
- CI-verktøy: GitHub Actions
- Testing: Cypress
- Kodekvalitet: Eslint, Sonarqube
- Kodeformatering: Prettier med konfigurasjonsfil .prettierrc
GitHub Actions kjører tre jobber ved PR eller push til main
eller dev
:
on:
push:
branches: -main
- dev
pull_request:
branches:
- main
- dev
Jobb | Beskrivelse | Kommandoer |
---|---|---|
Build Frontend |
Bygger frontend og kjører eslint. | npm run build |
Build Backend |
Bygger backend med test-e2e-profilen. | mvn -B package -Dspring.profiles.active=test-e2e -Ptest-e2e |
e2e |
Kjører cypress tester mot bygget frontend og backend. |
npx next start java -jar backend/backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=test-e2e npm run test:e2e:ci
|
For frontend-testing benyttes ende-til-ende (E2E) tester for intergrasjonen av brukerhistorier. Frontenden er kun presentasjonslaget i applikasjonen, og inneholder derfor nærmest ingen forretningslogikk, i tillegg til at tilstandshåntering er behandlet av eksterne biblioteker. Det er derfor mest hensiktsmessig å teste den totale brukeropplevelsen via ende-til-ende tester.
Det finnes totalt 23 cypress tester som tester 20 av 23 brukerhistorier. Tredjepartstjenester som epostintegrasjon eller turnstile (reCAPTCHA) testes ikke.
I tillegg ble det regelmessig kjørt brukertester.
- For å kjøre tester manuelt, må du først starte backend-serveren med test-e2e profilen:
mvn spring-boot:run -Ptest-e2e -Dspring.profiles.active=test-e2e
Her må du ha husket å ha lastet inn nødvendige env-variabler som ikke ligger ved i test-e2e properties-filen. Dette betyr i praksis å laste inn CORS_ALLOWED_ORIGINS.
Om serveren ikke starter med kommandoen over, kan man alternativt bruke denne kommandoen istedenfor:
npx dotenv-cli -v SPRING_PROFILES_ACTIVE=test-e2e -v CORS_ALLOWED_ORIGINS=http://localhost:3000 -- mvn spring-boot:run -Ptest-e2e
- Deretter kan man åpne Cypress for å kjøre testene:
npm run test:e2e:dev
- For å kjøre testene i headless-modus direkte i terminal (uten GUI):
npm run test:e2e
merk: her kjører man testene mot en frontend-utviklingsserver. For å kjøre e2e-tester mot en produksjonsserver, kan du først bygge frontend med npm run build
og så npm run test:e2e:ci
- Bruker
next/typescript
ognext/core-web-vitals
regelsett. - Kjøres automatisk når frontend builder.