![](/img/trans.png)
[英]Nest.js Jest cannot mock testing app but can mock testing controller
[英]Nest.js testing cannot override Provider
我在測試 Nest.js 應用程序時遇到了覆蓋提供程序的問題。 我的 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();
});
});
我的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();
}
}
還有我的 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
}
運行測試后,我收到以下錯誤:無法從“stats/services/stats.service.ts”中找到模塊“src/trips/trip.entity”我非常感謝一些幫助。
該錯誤與您使用的是自定義提供程序還是overrideProvider
無關。 默認情況下,Jest 默認不理解絕對導入,您需要使用moduleNameMapper
選項告訴 Jest 如何解析src/
導入。 通常像
{
"moduleNameMapper": {
"^src/(.*)$": "<rootDir>/$1"
}
}
假設rootDir
已設置為src
您可以通過在嵌套 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.