NestJS-API-er for virksomhetsbackend · leksjon

Databasesåing og testing

Lær å fylle databasen med startdata for utvikling og testing, slik at miljøene forblir konsistente.

Leksjon 3 av 311 trinn

Databasesåing og testing er en gratis leksjon i NestJS-API-er for virksomhetsbackend på CoddyKit. Dette er leksjon 3 av 3. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i NestJS-API-er for virksomhetsbackend, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i NestJS-API-er for virksomhetsbackend inneholder totalt 3 leksjoner.

Hva er database-seeding?

Se for Dem at De starter et nytt prosjekt eller kjører tester. Databasen er tom! Database-seeding er prosessen med å fylle en database med innledende data.

Disse dataene kan være alt fra standardbrukerkontoer til eksempler på produktoppføringer. Dette er viktig for utvikling og testing, og også for å sette opp et produksjonsmiljø med nødvendige konfigurasjonsdata.

Fordeler med seeding

Seeding gir flere viktige fordeler:

  • Konsistente miljøer: Sikrer at alle i teamet og CI/CD-pipelinen arbeider med de samme grunnlagsdataene.
  • Raskere utvikling: Utviklere slipper å bruke tid på å legge inn testdata manuelt.
  • Pålitelig testing: Tester kjøres mot forutsigbare data, noe som gjør resultatene mer pålitelige.
  • Enklere onboarding: Nye teammedlemmer kan raskt sette opp lokalmiljøet sitt med meningsfulle data.

Seeding med NestJS og TypeORM

I en NestJS-applikasjon som bruker TypeORM, innebærer seeding vanligvis at man oppretter dedikerte skript som samhandler med TypeORM-entiteter og repository-er.

TypeORM har et CLI-verktøy for migreringer, men til seeding oppretter man ofte egendefinerte skript som kan kjøres ved behov. Disse skriptene bruker TypeORMs EntityManager eller bestemte repository-er til å sette inn data.

Lage en enkel seeder

La oss se på et konseptuelt eksempel på et seederskript. Dette skriptet ligger vanligvis i en src/database/seeds-mappe og kjøres via et egendefinert npm-skript.

Det bruker TypeORMs Repository til å opprette og lagre en ny bruker, slik at dataene lagres korrekt.

// src/database/seeds/user.seeder.ts
import { DataSource } from 'typeorm';
import { User } from '../../users/user.entity';
import { Seeder, SeederFactoryManager } from 'typeorm-extension';

export default class UserSeeder implements Seeder {
  public async run(
    dataSource: DataSource,
    factoryManager: SeederFactoryManager
  ): Promise<any> {
    const userRepository = dataSource.getRepository(User);

    // Check if user already exists to prevent duplicates
    let adminUser = await userRepository.findOneBy({ email: 'admin@example.com' });

    if (!adminUser) {
      adminUser = userRepository.create({
        firstName: 'Admin',
        lastName: 'User',
        email: 'admin@example.com',
        password: 'securePassword123', // In real app, hash this!
      });
      await userRepository.save(adminUser);
      console.log('Admin user seeded.');
    } else {
      console.log('Admin user already exists.');
    }
  }
}

Kjøre seederskript

For å kjøre seederne legger De vanligvis til et egendefinert skript i package.json. De kan bruke ts-node til å kjøre TypeScript-filer direkte, eller kompilere dem først.

Et vanlig oppsett innebærer et typeorm-extension-bibliotek, som gir en mer strukturert måte å administrere og kjøre seedere på, omtrent slik migreringer håndteres.

// package.json snippets
{
  "scripts": {
    "seed:run": "ts-node -r tsconfig-paths/register ./node_modules/typeorm-extension/dist/cli/index.js seed -d src/config/typeorm.config.ts"
  }
}

Utviklingsdata

I utvikling innebærer seeding ofte å fylle databasen med en god mengde realistiske data. Dette hjelper Dem med å teste UI-komponenter, paginering og søkefunksjonalitet uten å opprette hundrevis av oppføringer manuelt.

De kan bruke biblioteker som Faker.js (eller @faker-js/faker) i seederne for å generere varierte og tilfeldige data for brukere, produkter, innlegg og så videre.

Testspesifikke data

Ved testing får seeding en mer presis rolle. De trenger ofte svært spesifikke og kontrollerte datasett for enhets- og integrasjonstestene Deres.

En test av en innloggingsfunksjon trenger for eksempel kanskje bare én bestemt brukeroppføring, ikke hundrevis. Dette sikrer at testene er deterministiske og ikke mislykkes på grunn av uventede data.

Seeding i testarbeidsflyter

For å sikre et rent utgangspunkt for hver testkjøring er det vanlig å kjøre seedere før eller etter testene. Jest, et populært testrammeverk, lar Dem definere funksjoner for oppsett og opprydding.

De kan bruke beforeEach eller beforeAll til å kjøre et seedingskript, slik at databasen er i en kjent tilstand før testene starter.

// Conceptual test file snippet
import { INestApplication } from '@nestjs/common';
import { Test } from '@nestjs/testing';
import { AppModule } from './app.module';
import { DataSource } from 'typeorm';
import UserSeeder from './database/seeds/user.seeder'; // Your seeder

describe('UsersController (e2e)', () => {
  let app: INestApplication;
  let dataSource: DataSource;

  beforeAll(async () => {
    const moduleFixture = await Test.createTestingModule({
      imports: [AppModule],
    }).compile();

    app = moduleFixture.createNestApplication();
    await app.init();
    
    // Get TypeORM DataSource
    dataSource = app.get(DataSource);
  });

  beforeEach(async () => {
    // Clear database and run specific seeders before each test
    await dataSource.synchronize(true); // CAUTION: Clears all data! Use carefully.
    await new UserSeeder().run(dataSource, null); // Run your seeder
  });

  afterAll(async () => {
    await app.close();
  });

  it('/users (GET) should return seeded users', () => {
    // Test logic here, expecting seeded data
  });
});

Viktige seeding-praksiser

Følg disse tipsene for robust seeding:

  • Idempotens: Sørg for at kjøring av en seeder flere ganger ikke oppretter dupliserte data med mindre det er tilsiktet. Kontroller først om oppføringene allerede finnes.
  • Tydelig separasjon: Hold utviklingsseedere (mye eksempeldata) adskilt fra testseedere (minimale og presise data).
  • Versjonskontroll: Lagre seederne i versjonskontrollsystemet.
  • Miljøspesifikk bruk: Vær forsiktig når De kjører seedere i produksjon. Seed bare nødvendige konfigurasjonsdata.

Fordeler med seeding

Database-seeding gir betydelige fordeler for utvikling og testing.

Hvilke av følgende er de viktigste fordelene med database-seeding?

Oppsummering: seeding for suksess

Gratulerer! De har lært om database-seeding, en viktig praksis for alle backend-utviklere.

Vi har gått gjennom hva seeding er, fordelene for utvikling og testing, og hvordan seedere implementeres og kjøres i en NestJS/TypeORM-applikasjon. De har også sett hvordan seeding kan integreres i testarbeidsflyter.

Når De behersker seeding, sikrer De konsistente, pålitelige og effektive utviklings- og testsykluser!

Gratis å komme i gang

Lær deg TypeScript med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
20
Leksjoner
76

Ofte stilte spørsmål

Er leksjonen «Databasesåing og testing» gratis?

Ja – hele teksten i «Databasesåing og testing» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av NestJS-API-er for virksomhetsbackend-kurset, kan du oppgradere til CoddyKit PRO. Kurset i NestJS-API-er for virksomhetsbackend inneholder totalt 3 leksjoner.

Hva lærer jeg i «Databasesåing og testing»?

Lær å fylle databasen med startdata for utvikling og testing, slik at miljøene forblir konsistente. Du øver på NestJS-API-er for virksomhetsbackend med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med NestJS-API-er for virksomhetsbackend?

Ingen tidligere erfaring er nødvendig. NestJS-API-er for virksomhetsbackend på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 3.

Hvor lang tid tar leksjonen «Databasesåing og testing»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne NestJS-API-er for virksomhetsbackend-leksjonen?

Ja. Alle NestJS-API-er for virksomhetsbackend-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Egendefinerte TypeORM-repositories
  2. Transaksjoner og migreringer
  3. Databasesåing og testing
← Tilbake til NestJS-API-er for virksomhetsbackend