#unit-testing #mocking #nestjs
#модульное тестирование #имитация #nestjs
Вопрос:
Предположим, я хочу написать модульный тест для службы, которая зависит от служб другого модуля.
Теперь вот мой вопрос. Есть ли какой-либо способ написать мой тест, чтобы я издевался над модулем, от которого MyService
зависит, чтобы я мог использовать его в своем модульном тестировании следующим образом:
const moduleRef = await Test.createTestingModule({
imports: [
MockedModule,
],
providers: [
MyService,
],
});
Или я должен написать макет для каждой службы зависимостей и использовать их следующим образом:
const moduleRef = await Test.createTestingModule({
providers: [
MyService,
{
provider: DependencyService,
useClass: DependencyServiceMock,
}
],
});
Ответ №1:
Я полагаю, было бы возможно использовать MockModule
, который предоставляет и экспортирует те же зависимости, от которых обычно зависит служба. Я еще не слышал, чтобы кто-то пытался это сделать, но я не понимаю, почему это не сработает. Итак, если у вас есть
@Injectable()
export class MyService {
constructor(private readonly depService: DependencyService) {}
...
}
Затем в вашем макетном модуле вам понадобится
@Module({
providers: [{
provide: DependencyService,
useClas: DependencyServiceMock,
}],
exports: [DependencyService],
})
export class MockedModule {}
И в вашем тесте вам нужно было бы сделать
beforeEach(async () => {
const app = await Test.createTestModule({
imports: [MockedModule],
providers: [MySerivce],
}).compile();
});
...