unit-testing - 嘲笑来自 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);
});
});
解决方案
推荐阅读
- hevc - Rigaya 的 NVEnc 对没有视频或音轨的文件进行编码
- python - SelectField:为什么返回“不是有效的选择错误”?
- xamarin - Xam.Plugin.Geolocator 在首次运行 iOS 14 时永远不会返回
- arduino - 暂停一个循环以在 Arduino 中运行另一个循环
- python - 使用带有 tqdm 进度条的 pafy 模块下载 YouTube 视频
- android - 从片段移动到给出错误的活动
- python - 如何检查重复列表并添加值(如果有)?
- reactjs - 如何仅阻止第三个应用程序的屏幕截图和记录
- python - 从 s3 存储桶中读取 gzip 文件
- amazon-web-services - AWS Sagemaker 训练作业卡在进行中状态