我正在尝试测试GRPC方法,但是在Jest中运行时遇到此错误: TypeError:无法读取未定义的属性'gprcFindAll'
这是我参考的文档: https://docs.nestjs.com/microservices/grpc
这是我的控制者:
@Controller('benchmarks')
export class BenchmarksController {
@GrpcMethod('HelloWorldGRPCService', 'findAll')
async gprcFindAll(metadata?: any): Promise<Benchmarks[]> {
const benchmarks = [];
return benchmarks;
}
}
这是我开玩笑的测试:
describe('Benchmarks Controller', () => {
let controller: BenchmarksController;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [BenchmarksController]
}).compile();
controller = module.get<BenchmarksController>(BenchmarksController);
});
it('should be defined', () => {
expect(controller).toBeDefined();
});
it('GRPC Should Find All', async function() {
const result = await controller.gprcFindAll();
console.log(result);
});
});
这是我的Proto 3文件:
syntax = "proto3";
package helloWorldGRPC;
service HelloWorldGRPCService {
rpc findAll () returns (repeated Benchmarks);
}
message Benchmarks {
string trans_id = 1;
string protocol = 2;
string database = 3;
Timestamp updated_at = 4;
Timestamp created_at = 5;
repeated Action actions = 6;
}
message Action {
string trans_id = 1;
int32 payload_length = 2;
string payload = 3;
string status = 4;
Timestamp updated_at = 5;
Timestamp created_at = 6;
}
答案 0 :(得分:0)
我知道这已经过时了,但我想我会回答如果来自谷歌的人遇到这个问题。
<块引用>@GrpcMethod() 装饰器参数都是可选的。如果在没有第二个参数的情况下调用(例如,'FindOne'),Nest 将基于将处理程序名称转换为大驼峰大小写(例如,findOne 处理程序与 FindOne rpc 调用相关联)自动将 .proto 文件 rpc 方法与处理程序相关联定义)。如下所示。
它说它是未定义的,因为它是未定义的。它正在寻找 gprcFindAll
但是您已将方法 findAll
命名为第二个参数。
要么省略findAll
@GrpcMethod('HelloWorldGRPCService')
async gprcFindAll(metadata?: any): Promise<Benchmarks[]> {
const benchmarks = [];
return benchmarks;
}
或更改第二个参数以匹配处理程序
@GrpcMethod('HelloWorldGRPCService', 'GprcFindAll')
async gprcFindAll(metadata?: any): Promise<Benchmarks[]> {
const benchmarks = [];
return benchmarks;
}