首页 > 解决方案 > 嘲笑来自 RabbitMq 的 RPC 上下文,nestjs

问题描述

我正在尝试在nestjs中为我的控制器编写单元测试,这是我的控制器的源代码:

import { Controller, Inject, Logger } from '@nestjs/common'
import { CONTEXT, MessagePattern, RequestContext } from '@nestjs/microservices'

import { CustomersService } from './customer.service'

@Controller("customers")
export class CustomersController {
  constructor(
    @Inject(CONTEXT)
    private ctx: RequestContext,
    private readonly customersService: CustomersService
  ) {}


  @MessagePattern("ticketing_customer_actions")
  async customersActions(): Promise<RpcResult> {
    const data = this.ctx.data;

    if (data.customerInfo.expire_date) {
      try {
            "REST OF THE CODE ....."

data是 json 从 rabbitmq 到我的控制器的地方,所以我需要模拟this.ctx.data,这就是我不知道该怎么做。我只是将我的服务路径提供给该jest.mock()函数来嘲笑我的服务。

到目前为止,这是我的测试:

jest.mock("../Customers/customer.service.ts");
describe("CustomersController", () => {
  let controller: CustomersController;
  let service: CustomersService;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [CustomersController],
      providers: [CustomersService],
    }).compile();
    service = module.get<CustomersService>(CustomersService);
    controller = module.get<CustomersController>(CustomersController);
  });

  it("should be defined", () => {
    expect(controller).toBeDefined();
  });

  it("CustomersActions", async () => {
    const result = new RpcResult({});
    jest
      .spyOn(service, "customersActions")
      .mockImplementation(async () => result);
    expect(await controller.customersActions()).toBe(result);
  });
});

标签: unit-testingmockingjestjsrabbitmqnestjs

解决方案


推荐阅读