javascript - 如何在柏树中重放相同的请求?
问题描述
我想测试以下用例:
cy.intercept()
我用方法监听 POST API 请求- 我单击执行 POST API 请求的按钮
- 我愿意
cy.wait('@myapi').its('response.statusCode').should('eq', 200);
- 之后我想用 cypress 再次触发请求(比如重放它)并确保这次我得到
statusCode
400 并验证响应正文以包含错误消息
如何在柏树中做到这一点?有任何想法吗?:D
我试图做这样的事情:
cy.intercept('POST', regexHelpers.getCartURIRegex(voucherCode)).as("redeemVoucher");
cy.get('[data-cy="buttonRedeemVoucher"]').click();
// cy.wait('@redeemVoucher').its('response.statusCode').should('eq', 200);
cy.wait('@redeemVoucher').then(function(interception) {
expect(interception.response.statusCode).to.eq(200);
const url = interception.request.url;
cy.request({
method: 'POST',
url: url,
headers: {
'Content-Type': 'application/json; charset=utf-8'
}}).its('status').should('eq', 400);
});
但在这种情况下,我得到400
错误代码 - 错误的请求已经在线
expect(interception.response.statusCode).to.eq(200);
第一次调用 API 应返回 200,但使用相同凭证的第二次调用应返回 400。
我很困惑为什么它已经在这一行返回 400:
expect(interception.response.statusCode).to.eq(200);
[编辑]
我设法做到了:
cy.intercept('POST', regexHelpers.getCartURIRegex(voucherCode)).as("redeemVoucher");
cy.get('[data-cy="buttonRedeemVoucher"]').click();
cy.wait('@redeemVoucher').its('request.url').as('voucherUrl').then(function() {
cy.request({
method: 'POST',
url: this.voucherUrl,
failOnStatusCode: false,
headers: {
'Content-Type': 'application/json; charset=utf-8'
}}).its('status').should('eq', 400);
});
但我不知道如何在这里也检查第一个呼叫响应代码是 200?
有人有想法吗?:D
解决方案
我还做了以下工作:
cy.wait('@redeemVoucher').should(({request, response}) => {
expect(response.statusCode).to.eq(200);
cy.request({
method: 'POST',
url: request.url,
failOnStatusCode: false,
headers: {
'Content-Type': 'application/json; charset=utf-8'
}}).should((response) => {
expect(response.status).to.eq(400);
expect(response.body.errors[0].message).to.eq('Voucher cannot be redeemed: ' + voucherCode);
});
});
推荐阅读
- c++ - 如何将 libpq 中的 NULL 值与 C++ 绑定?
- c# - MsalServiceException:AADSTS90014:缺少必填字段“aud”
- java - 如何从 MultipartFile 中提取文件路径
- c# - c#如何使用webresponseasync方法下载网页源
- java - 无法解析方法“getImage_id()”
- regex - 用正则表达式匹配文件路径的一部分
- redis - redisql 可以在 Windows 上运行吗?
- angular - Http 调用响应第二次调用,但不是第一次调用
- security - fluentd/kafka :SASL 身份验证需要配置 SSL
- node.js - 如果数据库数据发生变化,它会在 redis 缓存中自动变化吗?