如何有条件地模拟同一端点在柏树中的响应
How to conditionaly mock the response in the cypress for the same endpoint
我正在使用 cypress 编写端到端测试。我有一个 API 端点,根据请求正文,我会得到不同的响应。对于我正在编写的测试,我使用不同的请求主体多次调用 API 。我需要根据请求正文有条件地模拟响应。这是我尝试过的:
it("test", ()=>{
cy.intercept(
"POST",
"https://myendpoint/GetSetting",
(req)=>{
if (req.body.contains("xyz")){
req.reply(
{
property: "xyz",
value: "certain value",
}
)
}
else req.reply()
}
cy.visit()
...
})
好像不行。我得到 req.body.contains 不是函数。如何根据内容检查请求正文或响应正文,我可以模拟某些调用,并让其余调用像在现实生活中一样响应?谢谢
这取决于您在 req.body
中获得的内容。
根据您的模拟,它可能是一个 json 对象,其中“xyz”作为 属性 名称,在这种情况下
if (req.body["xyz"]) {
但是如果 json 还没有被解析,那么它是一个字符串所以
if (req.body.includes("xyz")) {
或更好地解析它以确保您检查 属性
const parsed = JSON.parse(req.body);
if (parsed["xyz"]) {
同时将 else req.reply()
更改为 else req.continue()
否则你将得到未定义的。
我正在使用 cypress 编写端到端测试。我有一个 API 端点,根据请求正文,我会得到不同的响应。对于我正在编写的测试,我使用不同的请求主体多次调用 API 。我需要根据请求正文有条件地模拟响应。这是我尝试过的:
it("test", ()=>{
cy.intercept(
"POST",
"https://myendpoint/GetSetting",
(req)=>{
if (req.body.contains("xyz")){
req.reply(
{
property: "xyz",
value: "certain value",
}
)
}
else req.reply()
}
cy.visit()
...
})
好像不行。我得到 req.body.contains 不是函数。如何根据内容检查请求正文或响应正文,我可以模拟某些调用,并让其余调用像在现实生活中一样响应?谢谢
这取决于您在 req.body
中获得的内容。
根据您的模拟,它可能是一个 json 对象,其中“xyz”作为 属性 名称,在这种情况下
if (req.body["xyz"]) {
但是如果 json 还没有被解析,那么它是一个字符串所以
if (req.body.includes("xyz")) {
或更好地解析它以确保您检查 属性
const parsed = JSON.parse(req.body);
if (parsed["xyz"]) {
同时将 else req.reply()
更改为 else req.continue()
否则你将得到未定义的。