[英]Nest.js testing cannot override Provider
I have a problem with overriding provider in nest.js application for testing.我在测试 Nest.js 应用程序时遇到了覆盖提供程序的问题。 My stats.controller.spec.ts:
我的 stats.controller.spec.ts:
import { StatsService } from './services/stats.service';
import { StatsController } from './stats.controller';
describe('StatsController', () => {
let controller: StatsController;
const mockStatsService = {};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [StatsController],
providers: [StatsService],
})
.overrideProvider(StatsService)
.useValue(mockStatsService)
.compile();
controller = module.get<StatsController>(StatsController);
});
it('should be defined', () => {
expect(controller).toBeDefined();
});
});
My stats.controller.ts:我的stats.controller.ts:
import { Controller, Get } from '@nestjs/common';
import { StatsService } from './services/stats.service';
@Controller('stats')
export class StatsController {
constructor(private statsService: StatsService) {}
@Get('weekly')
getWeeklyStats() {
return this.statsService.getWeeklyStats();
}
@Get('monthly')
getMonthlyStats() {
return this.statsService.getMonthlyStats();
}
}
And my stats.service.ts:还有我的 stats.service.ts:
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Trip } from 'src/trips/trip.entity';
import { from, map } from 'rxjs';
import { DatesService } from 'src/shared/services/dates.service';
@Injectable()
export class StatsService {
constructor(
@InjectRepository(Trip) private tripRepository: Repository<Trip>,
private datesServices: DatesService,
) {}
//some code here
}
And after running test I get following errors: Cannot find module 'src/trips/trip.entity' from 'stats/services/stats.service.ts' I would really appreciate some help.运行测试后,我收到以下错误:无法从“stats/services/stats.service.ts”中找到模块“src/trips/trip.entity”我非常感谢一些帮助。
The error is unrelated to if you're using a custom provider or overrideProvider
.该错误与您使用的是自定义提供程序还是
overrideProvider
无关。 Jest by default doesn't understand absolute imports by default, and you need to use the moduleNameMapper
option to tell Jest how to resolve src/
imports.默认情况下,Jest 默认不理解绝对导入,您需要使用
moduleNameMapper
选项告诉 Jest 如何解析src/
导入。 Usually something like通常像
{
"moduleNameMapper": {
"^src/(.*)$": "<rootDir>/$1"
}
}
Assuming rootDir
has been set to src
假设
rootDir
已设置为src
You can override the provider by using the below code in nest js:您可以通过在嵌套 js 中使用以下代码来覆盖提供程序:
import { StatsService } from './services/stats.service';
import { StatsController } from './stats.controller';
describe('StatsController', () => {
let controller: StatsController;
const mockStatsService = {};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [StatsController],
providers: [{
provide: StatsService,
useValue: mockStatsService
}],
})
.compile();
controller = module.get<StatsController>(StatsController);
});
it('should be defined', () => {
expect(controller).toBeDefined();
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.