имитирующий контекст RPC, исходящий из RabbitMQ в шутку, nestjs

#unit-testing #mocking #jestjs #rabbitmq #nestjs

#модульное тестирование #издевательство #jestjs #rabbitmq #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);
  });
});
  

Комментарии:

1. Что такое this.ctx ?

2. контекст, который я ввел в свой класс, предоставляет библиотека nest, поэтому я использую его для получения данных из RabbitMQ, я обновил свой пост, проверьте его еще раз для получения дополнительных разъяснений,