因此,我们在柏树测试中执行以下操作:
login(user: SimpleUser) {
cy.request({
method: "POST",
url: `${this.apiUrl}/login`,
body: {
username: user.email,
password: "mypassword",
}
})
.should(assertStatusOk)
.then((resp) => {
...
这与他们在页面上的建议非常相似。
然而,当登录失败时,它会登录到控制台:
The request we sent was:
Method: POST
URL: myurl
Headers: {
"Connection": "keep-alive",
"user-agent": "myuseragent",
"accept": "*/*",
"accept-encoding": "gzip, deflate",
"content-type": "application/json",
"content-length": mycontentlength
}
Body: {"username":"myusername","password":"mypassword"}
其中记录真实密码。这是可以预防的吗?我已经在其他线程中阅读了在执行cy.type
时添加{log: false}
选项的内容,但对于cy.request
,这似乎没有影响。有什么想法我可以防止柏树打印全身吗?
如果出现状态代码错误,可以将failOnStatusCode: false
添加到请求选项中。
cy.request({
method: "POST",
url: `http://example.com/login`,
failOnStatusCode: false,
log: false,
body: {
username: user.email,
password: "mypassword",
}
})
.should('have.property', 'status', '200')
然后,您看到的只是期望{Object(body,headers,…(}的属性状态为"200",但得到了404。
如果除了坏状态代码之外还有其他错误类型,请为cy.request()
替换一个纯fetch((。
我遇到了类似的问题,花了一段时间才找到解决方案。将{ log: false }
选项传递给cy.request
没有帮助,因为这不适用于测试失败的输出消息。相反,您可以通过在支持文件中使用Cypress.on('fail', fn)
来更改输出行为。如果你想保留日志的其余部分,但删除密码,你可以这样做:
Cypress.on('fail', e => {
const passwordRegex = myRegexThatFindsPasswordText;
const passwordMatch = e.message.match(passwordRegex);
if (passwordMatch !== null) {
e.message = e.message.replace(passwordRegex, '[FILTERED]');
}
// Rethrow the error in order to retain the test's failed status
throw e;
});