对于我们的一个应用程序,我需要设置本地存储以绕过登录页面过程。
我有以下函数将返回我需要设置的 accessToken。此功能在节点中运行时有效。
async function getAccessToken(email, pwd) {
const form = {email: email, password: pwd};
let config = {
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
}
};
const accessToken = await axios.post(`${process.env.API_URL}/loginWithToken`, qs.stringify(form), config);
console.log(accessToken.data.accessToken);
return accessToken.data.accessToken
}
我正在尝试创建一个将设置本地存储的 cypress 命令,然后访问该应用程序。运行时,我收到一个错误,提示我从一个命令返回了一个 promise,同时还在该 promise 中调用了一个或多个 cy 命令。
Cypress.Commands.add("logInAs", async(Useremail, Userpwd, TMURL) => {
var accessToken = cy.task('getAccessToken', {email: Useremail, pwd: Userpwd
}).then(Visit =>{
window.localStorage.setItem("accessToken", accessToken);
window.localStorage.setItem("refreshToken", accessToken);
cy.visit(`${process.env.TM_API_URL}/`+TMURL+``);
});
});
我还尝试了以下 cypress 命令
require('dotenv').config();
Cypress.Commands.add('logInAs3', (Useremail, Userpwd, TMURL) => {
cy.request({
method: 'POST',
url: `${process.env.API_URL}/loginWithToken`,
body: {
user: {
email: Useremail,
password: Userpwd,
}
}
})
.then((resp) => {
window.localStorage.setItem('accessToken', resp.body.data.data.accessToken);
window.localStorage.setItem('refreshToken', resp.body.data.data.accessToken);
cy.visit(`${process.env.TM_API_URL}/`+TMURL+``, {failOnStatusCode: false})
})
});
但是我收到以下错误。为了获取访问令牌,我需要发布到的 URL 与基本 URL 是不同的域。所以在帖子中使用 base 对我来说不起作用。
cy.request() 必须提供一个完全限定的 url - 一个以 ‘http’ 开头的。默认情况下,cy.request() 将使用当前窗口的原点或 cypress.json 中的“baseUrl”。这些值都不存在。
原文由 TestRaptor 发布,翻译遵循 CC BY-SA 4.0 许可协议
试试这个:
在
cypress.json
在
support/commands.js
在你的测试中