56 lines
1.8 KiB
Markdown
56 lines
1.8 KiB
Markdown
# Тестирование
|
|
|
|
## Зачем нужен тестовый режим
|
|
|
|
Для юнит- и интеграционных тестов используется метод `forTesting`. В этом случае `DataStoreModule`
|
|
работает на **in-memory движке**:
|
|
|
|
- API полностью совпадает с production-режимом,
|
|
- данные не сохраняются между перезапусками,
|
|
- не требуется подключение к реальной базе данных.
|
|
|
|
---
|
|
|
|
## Подключение в тестах
|
|
|
|
Вместо `forRoot` в тестовом модуле подключается `forTesting`.
|
|
|
|
```ts
|
|
// 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();
|
|
});
|
|
});
|
|
```
|
|
|
|
---
|
|
|
|
## Доступ к данным
|
|
|
|
Для задания данных в тестах достаточно получить бакет через сервис модуля:
|
|
|
|
```ts
|
|
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' });
|
|
});
|
|
```
|