在赛普拉斯中设置本地存储 [英] Set local storage in Cypress
问题描述
对于我们的一个应用程序,我需要设置本地存储以绕过登录页面过程。
For one of our applications, I need to set local storage in order to bypass the login page process.
我具有以下函数,该函数将返回accessToken,我需要设置。
I have the following function that will return the accessToken that I need to set. This function works when running in node.
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命令,然后访问该应用程序。运行时,出现错误,我从命令返回了一个承诺,同时又在该承诺中调用了一个或多个cy命令。
I'm trying to create a cypress command that will set local storage, then visit the application. When running, I get an error that I returned a promise from a command while also invoking one or more cy commands in that promise.
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命令
I've also tried the following cypress command
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是与基本URL不同的域。因此,在帖子中使用基础不适用于我。
But I get the following error. The URL I need to post to in order to get the access token, is a different domain than the base url. So using the base in the post will not work for me.
cy.request()必须提供完全限定的网址-以 http开头的
。默认情况下,cy.request()将使用当前
窗口的来源或cypress.json中的 baseUrl。这些
值都不存在。
cy.request() must be provided a fully qualified url - one that begins with 'http'. By default cy.request() will use either the current window's origin or the 'baseUrl' in cypress.json. Neither of those values were present.
推荐答案
请尝试以下操作:
在 cypress.json
{
"env": {
"EXTERNAL_API": "https://jsonplaceholder.typicode.com/todos/1"
}
}
在 support / commands.js
Cypress.Commands.add('logInAs3', (Useremail, Userpwd, TMURL) => {
cy.request({
method: 'POST',
url: `${Cypress.env('EXTERNAL_API')}/loginWithToken`,
body: {
user: {
email: Useremail,
password: Userpwd,
}
}
})
.its('body')
.then((body) => {
window.localStorage.setItem('accessToken', body.data.data.accessToken);
window.localStorage.setItem('refreshToken', body.data.data.accessToken);
})
});
在测试内部
beforeEach(() => {
cy.logInAs3()
})
it('check localStorage token', () => {
cy.visit()
expect(localStorage.getItem('accessToken')).not.null
expect(localStorage.getItem('refreshToken')).not.null
})
这篇关于在赛普拉斯中设置本地存储的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!