#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, я обновил свой пост, проверьте его еще раз для получения дополнительных разъяснений,