Mencipta ujian dalam pangkalan data sebenar dengan NestJS, TypeORM dan PostgreSQL

Barbara Streisand
Lepaskan: 2024-10-04 12:17:30
asal
128 orang telah melayarinya

Creating tests in real database with NestJS, TypeORM and PostgreSQL

Pengenalan
Sama ada anda berada dalam mod pembangunan dipacu ujian atau tidak, terdapat beberapa faedah berguna dalam ujian bertulis:
Mereka menyediakan jaring keselamatan yang membolehkan pembangun membuat perubahan dengan yakin, menambah ciri baharu, kod refactor mengetahui bahawa ujian akan mengesahkan kefungsian itu kekal utuh.

Sakitnya
Sesetengah daripada kita tidak diberkati dengan cpus mewah, dan itu tidak boleh mengecewakan terutamanya apabila berurusan dengan projek besar.
Baru-baru ini saya bekerja dalam aplikasi NestJS yang besar, dan saya hanya mahu menguji beberapa Pertanyaan TypeORM dan setiap kali saya mengubah suai saya perlu memuatkan keseluruhan projek. Fikirkan muka kecewa, itu adalah saya.

Penyelesaian
Ujian menulis adalah satu amalan yang baik, bukan? bagaimana jika saya boleh membangunkan lebih pantas dan secara tidak langsung mencipta ujian dan juga mengelakkan keperluan untuk mencipta olok-olok dan stubs? Ketika itu saya terfikir: Menguji terhadap pangkalan data sebenar.

Kod

Berikut ialah ujian:


import * as dotenv from 'dotenv';
import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm'; 
dotenv.config();
describe('Queryes only test', () => {
    let app: INestApplication;
    let foodRepo: FoodRepository;

    beforeAll(async () => {
        const moduleFixture: TestingModule = await Test.createTestingModule({
            imports: [
                TypeOrmModule.forRootAsync({
                    useFactory: (configService: any) => ({
                        type: 'postgres',

                        host: process.env.TYPEORM_HOST,
                        port: Number(process.env.TYPEORM_PORT),
                        username: process.env.TYPEORM_USERNAME,
                        password: process.env.TYPEORM_PASSWORD,
                        database: process.env.TYPEORM_DATABASE,

                        entities: ['src/app/**/entities/*.entity.*'],
                        synchronize: false,
                        logging: true /* That will make the sql queryes appear in the console */
                    })
                }),
                TypeOrmModule.forFeature([FoodRepository])
            ]
        }).compile();

        app = moduleFixture.createNestApplication();
        await app.init();

        foodRepo = moduleFixture.get<FoodRepository>(FoodRepository);
    });

    jest.setTimeout(30000);

    it('Must find foods from regular customers', async () => {
        const foodsFromRegularCustomers = await foodRepo.findFoodsFromRegularCustomers().getMany();
        expect(Array.isArray(foodsFromRegularCustomers)).toBeTruthy();
    });

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



Salin selepas log masuk

dan itulah repositori saya:


async findFoodsFromRegularCustomers() {
  const currentDate = new Date();
  const startOfWeek = new Date(currentDate.setDate(currentDate.getDate() - currentDate.getDay()));

  return this.createQueryBuilder('food')
    .innerJoin('food.customer', 'customer')
    .innerJoin('customer.orders', 'orders')
    .select([
      'customer.id', 
      'customer.name', 
      'customer.cpf', 
      'customer.address'
    ])
    .where('orders.createdAt >= :startOfWeek', { startOfWeek })
    .groupBy('customer.id')
    .having('COUNT(orders.id) > :minOrders', { minOrders: 10 })  
}


Salin selepas log masuk

Ujian itu mestilah bukan kesempurnaan, tetapi saya memberi jaminan kepada anda:
Ia akan membantu pasukan pembangun mengelakkan menghantar pertanyaan yang rosak.

Jika sesetengah atribut atau perhubungan entiti berhenti wujud, seperti pelanggan.alamatkan pembina pertanyaan tidak akan memecahkan masa binaan. Tetapi ujian akan berlaku.?

Atas ialah kandungan terperinci Mencipta ujian dalam pangkalan data sebenar dengan NestJS, TypeORM dan PostgreSQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!