簡體   English   中英

Nest.js 測試無法覆蓋 Provider

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM