@ 连接rpc/ 连接- playwright
Connect是图书馆的一个家族,用于构建具有不同语言和平台的型号安全API. 连接-ES 把他们带到TypeScript, 网页浏览器,然后去Node.js.
@connectrpc/connect-playwright 为Connect-ES应用程序编写端到端测试提供公用设备
使用 剧作家。 。 。 .
安装
npm install @connectrpc/connect-playwright
使用量
@connectrpc/connect-playwright 目的是通过提供
一个模拟无用的RPC的API.
统一连接RPC可以通过使用 createMockRouter 函数。 此函数
允许您修改您服务中的一对多RPC的行为.
让我们用以下的Protobuf文件通过一个实例:
syntax = "proto3";
package example;
message GetUserRequest {
int32 id = 1;
}
message GetUserResponse {
int32 id = 1;
string name = 2;
string role = 3;
}
message UpdateUserRequest {
int32 id = 1;
string name = 2;
string role = 3;
}
message UpdateUserResponse {}
message DeleteUserRequest {
int32 id = 1;
}
message DeleteUserResponse {}
service UserService {
rpc GetUser(GetUserRequest) returns (GetUserResponse) {}
rpc UpdateUser(UpdateUserRequest) returns (UpdateUserResponse) {}
rpc DeleteUser(DeleteUserRequest) returns (DeleteUserResponse) {}
}
这个 createMockRouter 函数接受 Playwright BrowserContext
和用于指定 baseUrl 您的连接客户端通常会在一个
非试验环境。 此函数调用将返回 a MockRouter 用于指定 RPC 对象
行为.
这个 MockRouter 类型提供了两种方法,允许您在服务级别或
个人RPC级别.
服务级模拟器
这个 service 方法提供了在一次引用中嘲弄整个服务的能力。 它接受两个论点:
从您的 Protobuf 文件生成的服务定义, 然后, 两个值之一 :
- 包含您想要的所有 RPC 模拟执行对象 .
mock- 配置只返回 RPC 指定的类型的呼叫的字符串,所有默认 数值设定。 如果您不关心响应, 但希望它能成功.
注:任何未具体说明的《议定书》将直接通过实际执行.
例如:
test("mock RPCs at service level", async ({ context }) => {
const mock = createMockRouter(context, {
baseUrl: "https://api.myproject.com",
});
await mock.service(UserService, {
// Mock getUser to return a custom response.
getUser() {
return {
id: 1,
name: "Homer Simpson",
role: "Safety Inspector",
};
},
});
// ...
});
再次指出,在上述例子中 updateUser 财务报告和审定财务报表 deleteUser 函数将传递到实际执行中
因为它们没有具体说明.
如果你不需要任何自定义行为,而只是想嘲笑你服务中的所有RPC,你可以这样做 简称 :
await createMockRouter(context, {
baseUrl: "https://api.myproject.com",
}).service(UserService, "mock");
RPC- 级别模拟器
这个 rpc 方法提供了嘲弄单一RPC的能力. 它接受三个论点:服务定义
从您的 Protobuf 文件生成的 RPC 名称, 您想要模拟, 然后, 两个值之一 :
- 包含理想的 RPC 模拟执行功能.
mock- 配置只返回 RPC 指定的类型的呼叫的字符串,所有默认 数值设定.
例如:
test("mock RPCs at rpc level", async ({ context }) => {
const mock = createMockRouter(context, {
baseUrl: "https://api.myproject.com",
});
// Mock getUser with a custom response
await mock.rpc(UserService.method.getUser, () => {
return {
id: 1,
name: "Homer Simpson",
role: "Safety Inspector",
};
});
// Just return a default-constructed DeleteUserResponse without hitting the actual RPC.
await mock.rpc(UserService.method.deleteUser, "mock");
});
同一规则适用于未指明的保护责任,而且 updateUser 函数将传递到实际执行中
因为它没有具体说明.
注意: service 财务报告和审定财务报表 rpc 方法返回 a Promise,它解决了原始 MockRouter 对象.
这可以让你利用 承诺链,如果你想.
在实践中使用上述所有方法的例子可见于 连接- playwright- 示例 目录.
洞穴
目前,只有无谓的请求才能被嘲笑. 我们希望很快增加流动支持.