CI og Testing - aTrueYety/idatt2106-2025-09-backend GitHub Wiki

CI og Testing

Denne siden dokumenterer hvordan kontinuerlig integrasjon (CI), testing og kodekvalitet er satt opp i backend-prosjektet.

Backend

Oppsummert

  • CI-verktøy: GitHub Actions
  • Testing: JUnit 5 + Mockito + Spring Boot (@JdbcTest)
  • Dekning: JaCoCo (mvn verify)
  • Kodekvalitet: Google Checkstyle

CI-workflow (.github/workflows/build.yml)

GitHub Actions kjører tre jobber ved PR til main eller dev:

on:
  pull_request:
    branches:
      - main
      - dev

Jobber:

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

Testing

Enhetstester

  • Bruker Mockito og JUnit 5
  • Eksempel: ExtraResidentServiceTest.java

Integrasjonstester

  • Bruker @JdbcTest med import av egne JDBC-repositories
  • Bruker application-test.properties
  • Eksempel: ExtraResidentServiceIntegrationTest.java

Ende til Ende (E2E) tester

  • Bruker Cypress
  • Bruker application-test.properties med H2-database
  • Eksempel: register.cy.ts
  • Ler mer om E2E-tester under Frontend

Testprofiler

# 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

Kjør tester manuelt

  • Enhetester og integrasjonstester kan kjøres lokalt med Maven:
mvn test

Testdekning (JaCoCo)

  • Dekning genereres ved:
    mvn verify
  • Rapporter i: target/site/jacoco/index.html
  • Følgende pakker er ekskludert:
    <exclude>**/model/**</exclude>
    <exclude>**/config/**</exclude>

Kodekvalitet (Checkstyle)

  • Bruker google_checks.xml via maven-checkstyle-plugin hos VSCode
  • Automatisk kjørt i verify-fase og CI

Frontend

  • CI-verktøy: GitHub Actions
  • Testing: Cypress
  • Kodekvalitet: Eslint, Sonarqube
  • Kodeformatering: Prettier med konfigurasjonsfil .prettierrc

CI-workflow (.github/workflows/build.yml)

GitHub Actions kjører tre jobber ved PR eller push til main eller dev:

on:
  push:
    branches: -main
      - dev
  pull_request:
    branches:
      - main
      - dev

Jobber:

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

Testing

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.

Kjør tester manuelt

  • 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

Kodekvalitet (ESLint)

  • Bruker next/typescript og next/core-web-vitals regelsett.
  • Kjøres automatisk når frontend builder.
⚠️ **GitHub.com Fallback** ⚠️