1.8 KiB
1.8 KiB
Тестирование
Зачем нужен тестовый режим
Для юнит- и интеграционных тестов используется метод forTesting. В этом случае DataStoreModule
работает на in-memory движке:
- API полностью совпадает с production-режимом,
- данные не сохраняются между перезапусками,
- не требуется подключение к реальной базе данных.
Подключение в тестах
Вместо forRoot в тестовом модуле подключается forTesting.
// example.spec.ts
import { Test } from '@nestjs/testing';
import { DataStoreModule } from '@src/server/data-store';
import { FooModule } from './foo/foo.module';
describe('FooModule', () => {
it('Инициализация', async () => {
const module = await Test.createTestingModule({
imports: [DataStoreModule.forTesting(), FooModule],
}).compile();
expect(() => module.createNestApplication()).not.toThrow();
});
});
Доступ к данным
Для задания данных в тестах достаточно получить бакет через сервис модуля:
it('Запись данных в bucket', async () => {
const module = await Test.createTestingModule({
imports: [DataStoreModule.forTesting(), FooModule, BarModule],
}).compile();
const dataStore = module.get(DataStoreService);
const barService = module.get(BarService);
const bucket = dataStore.bucket('bar', 'test'); // доступ к bucket "test" модуля "bar"
await bucket.set(1, 'key', { value: 'bar' });
expect(await barService.bucket.get(1, 'key')).toEqual({ value: 'bar' });
});