artymail
@artymail

Как протестировать (или замокать) модуль, когда есть импорт констант из внешних файлов (NodeJS, ExpressJS, NestJS)?

Пытаюсь написать e2e-тест приложения на Nest (https://nestjs.com/) - надстройка над ExpressJS.

Вот один из модулей:
import {Module} from '@nestjs/common';
import {DatabaseService} from './database.service';
import {config} from "../configuration";
import {SharedModule} from "../shared/shared.module";

const pgp = require('pg-promise')();
const db = pgp({
    host: config.database.host,
    ...
});

const connectionProvider = { provide: 'DatabaseToken', useValue: db };

@Module({
    components: [DatabaseService, connectionProvider],
    exports: [DatabaseService],
    imports: [SharedModule]
})
export class DatabaseModule {}


Вот так выглядит тест:
import * as express from 'express';
import * as request from 'supertest';
import { Test } from '@nestjs/testing';
import {AppModule} from "../src/app.module";

describe('Application', () => {
    const server = express();
    
    beforeAll(async () => {
        const module = await Test.createTestingModule({
            imports: [AppModule],
        }).compile();

        const app = module.createNestApplication(server);
        await app.init();
    });

    it(`/GET area`, () => {
        return request(server)
            .get('/area')
            .expect(200)
            .expect({
                data: {}
            });
    });
});


При запуске теста вылетает ошибка:
TypeError: Cannot read property 'host' of undefined


Пытался замокать импорт константы:
jest.mock('../configuration', () => ({
            database: {
                host: ''
            },
        }));


Но результат прежний. Либо я не правильно написал тест, либо ошибка в архитектуре.
  • Вопрос задан
  • 866 просмотров
Пригласить эксперта
Ваш ответ на вопрос

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

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