Как в NetsJS с TypeORM в юнит тестах использовать тестовую базу(не основную)?

Приветствую.
Перед запуском тестов запускаю соединение с тестовой базой:
beforeEach(() => {
    return createConnection({
        type: "sqlite",
        database: 'testBase",
        entities: [User, SmsCodes],
        ...........
});
afterEach(() => {
    let conn = getConnection();
    return conn.close();
});


Далее у меня есть функция которая работает с реальной базой и мне её нужно протестировать:
it('Возврат: true при правильном коде SMS', async () => {
            const usersService = UsersService;
            await getRepository(SmsCodes).insert({
                email: 'test@email.com',
                code: 1234,
            });
            const checkCorrectSms = await usersService.checkCorrectSmsCode('test@email.com', 1234); 
// Та самая тестируемая функция
            expect(checkCorrectSms).toBe(true);
        })

Тестируемая функция должна обратиться к тестовой базе, а не к реальной. Как это сделать?
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
@DEMETRA-WORK Автор вопроса
Разобрался, вот решение кому понадобиться:
Нужно передать тестовый репозиторий в конструктор сервиса, где объявлена данная функция.
describe('Users Service Test /services/users.service.ts', () => {
    let usersService: UsersService;
    let smsCodesRepository: Repository<SmsCodes>;
    let testingModule: TestingModule;

    const testConnectionName = 'testConnection';

    beforeEach(async () => {
        testingModule = await Test.createTestingModule({
            providers: [
                UsersService,
                {
                    provide: getRepositoryToken(SmsCodes),
                    useClass: Repository,
                },
            ],
        }).compile();

        let connection = await createConnection({
            type: "postgres",
            database: "baseTest",
            dropSchema: true,
            entities: [SmsCodes],
            synchronize: true,
            name: testConnectionName
        });

        smsCodesRepository = getRepository(SmsCodes, testConnectionName);
        usersService = new UsersService(userRepository, smsCodesRepository);

        return connection;
    });

    afterEach(async () => {
        await getConnection(testConnectionName).close()
    });

    describe('checkCorrectSmsCode', () => {
        it('Возврат: true при правильном коде SMS', async () => {
            const mockEmail = 'test@email.com'
            const mockCode = 1234;
            await smsCodesRepository.insert({
                email: mockEmail,
                code: mockCode,
            });
            const checkCorrectSms = await usersService.checkCorrectSmsCode(mockEmail, mockCode);
            expect(checkCorrectSms).toBe(true);
        })
    })
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы