我如何使用 Protobuf 对 Cypress 存根响应进行编码?
How I can encode with Protobuf a Cypress stub response?
我有一些固定装置来存根服务器,该服务器使用 protobuf 对消息进行编码(我正在使用 protobufjs
)。我想对 fixture 进行解码以轻松操作它们,并让 Cypress 在将响应发送给客户端之前对存根主体进行编码,我该怎么做?
[更新] 它现在可以作为 Cypress plugin
这是我的解决方案:
cypress/plugins/protobufjs/index.js
文件(导入 protobuf 定义的地方)
const path = require("path");
const protobufjs = require("protobufjs");
const definition = path.join(__dirname, "../../../public/escrow/ui.proto");
const proto = protobufjs.loadSync(definition);
module.exports = {
Status: proto.lookupType("escrow.Status"),
};
cypress/plugins/index.js
文件(编码发生在自定义赛普拉斯任务中)
const { StringDecoder } = require("string_decoder");
const Messages = require("./protobufjs");
module.exports = on => {
on("task", {
protobufEncode: ({ data, encoderName }) => {
const decoder = new StringDecoder("utf8");
const bufferValue = Messages[encoderName].encode(data).finish();
return decoder.end(Buffer.from(bufferValue));
}
});
};
- 在你的测试中
cy.fixture("YOUR_FIXTURE.json").then(async json => {
cy.task("protobufEncode", { encoderName: "Status", data: json }).then(result => {
cy.route({
headers: {
"content-type": "application/octet-stream"
},
method: "GET",
response: result,
status: 200,
url: `**/YOUR_URL`
}).as("route_status_one_usb_key");
});
});
我有一些固定装置来存根服务器,该服务器使用 protobuf 对消息进行编码(我正在使用 protobufjs
)。我想对 fixture 进行解码以轻松操作它们,并让 Cypress 在将响应发送给客户端之前对存根主体进行编码,我该怎么做?
[更新] 它现在可以作为 Cypress plugin
这是我的解决方案:
cypress/plugins/protobufjs/index.js
文件(导入 protobuf 定义的地方)
const path = require("path");
const protobufjs = require("protobufjs");
const definition = path.join(__dirname, "../../../public/escrow/ui.proto");
const proto = protobufjs.loadSync(definition);
module.exports = {
Status: proto.lookupType("escrow.Status"),
};
cypress/plugins/index.js
文件(编码发生在自定义赛普拉斯任务中)
const { StringDecoder } = require("string_decoder");
const Messages = require("./protobufjs");
module.exports = on => {
on("task", {
protobufEncode: ({ data, encoderName }) => {
const decoder = new StringDecoder("utf8");
const bufferValue = Messages[encoderName].encode(data).finish();
return decoder.end(Buffer.from(bufferValue));
}
});
};
- 在你的测试中
cy.fixture("YOUR_FIXTURE.json").then(async json => {
cy.task("protobufEncode", { encoderName: "Status", data: json }).then(result => {
cy.route({
headers: {
"content-type": "application/octet-stream"
},
method: "GET",
response: result,
status: 200,
url: `**/YOUR_URL`
}).as("route_status_one_usb_key");
});
});