【问题标题】:Where does this Error in my NestJs Controller Unittesting comes from?我的 NestJs 控制器单元测试中的这个错误来自哪里?
【发布时间】:2022-01-07 00:06:55
【问题描述】:

我正在尝试为我的控制器编写一个测试用例,但我只是一遍又一遍地遇到相同的错误。 - 已经为该服务编写了我的测试用例,并且工作正常。

下面我将提供我的代码:ticket.controller.spec.ts


import { TicketController } from './ticket.controller';
import { TicketService } from '../services/ticket.service';
import { CreateTicketDto } from 'src/dto/create-ticket.dto';

describe('TicketService', () => {
  let ticketsControler = TicketController;
  let spyService = TicketService;
  beforeAll(async () => {
    const ApiServiceProvider = {
      provide: TicketService,
      useFactory: () => ({
        createTicket: jest.fn(() => []),
        findAll: jest.fn(() => []),
        findByCreator: jest.fn(() => {}),
        findById: jest.fn(() => {}),
        updateTicket: jest.fn(() => []),
        deleteTicket: jest.fn(() => []),
        update: jest.fn(() => []),
      }),
    };

    const module: TestingModule = await Test.createTestingModule({
      controllers: [TicketController],
      providers: [TicketService, ApiServiceProvider],
    }).compile();

    ticketsControler = module.get<ticketController>(TicketController);
    spyService = module.get<TicketService>(TicketService);
  });

  it('calling createTicket', () => {
    const dto = new CreateTicketDto();
    expect(TicketController.createTicket(dto)).not.toEqual(null);
  });
});

这就是我一直遇到的错误 =>

第 29 和 30 行 Property 'prototype' is missing in type 'TicketController' but required in type 'typeof TicketController'.

我在第 35 行也遇到了这个错误,但我想这取决于之前的问题。 Property 'createTicket' does not exist on type 'typeof TicketController'.

【问题讨论】:

    标签: typescript unit-testing nestjs


    【解决方案1】:

    您的测试设置中似乎没有正确使用某些类型

        const module: TestingModule = await Test.createTestingModule({
          controllers: [TicketController],
          providers: [TicketService, ApiServiceProvider],
        }).compile();
    
        ticketsControler = module.get<ticketController>(TicketController);
                                   // ^^^^^^ This should be a type. TicketController
        spyService = module.get<TicketService>(TicketService);
      });
    
      it('calling createTicket', () => {
        const dto = new CreateTicketDto();
        expect(TicketController.createTicket(dto)).not.toEqual(null);
             // ^^^ this should be an isntance. ticketController
      });
    

    【讨论】:

    • 好吧,类型有问题。对于其他所有人,在第 6 行和第 7 行中,我做了这个let ticketsController = TicketController; 而不是这个let ticketsController: TicketController;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    相关资源
    最近更新 更多