为了账号安全,请及时绑定邮箱和手机立即绑定

在 Cypress 中设置本地存储

在 Cypress 中设置本地存储

忽然笑 2021-06-17 09:10:20
对于我们的一个应用程序,我需要设置本地存储以绕过登录页面过程。我有以下函数将返回我需要设置的 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 命令来设置本地存储,然后访问该应用程序。运行时,我收到一个错误,我从命令返回了一个承诺,同时还调用了该承诺中的一个或多个 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 是不同的域。所以在帖子中使用基础对我不起作用。cy.request() 必须提供一个完全限定的 url - 一个以“http”开头的。默认情况下,cy.request() 将使用当前窗口的原点或 cypress.json 中的“baseUrl”。这些值都不存在。
查看完整描述

3 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

每次测试运行(服务器和客户端)的成本资源时都点击登录 API


这是优化的方式:


只需在 Cypress Env 中存储登录/身份验证 API 成功响应并在命令函数中重用它


在 cypress.json


{

  "myenv": {

    "authResponse": {

      "apiToken": "jwt_token_received_from_server",

      "refreshToken": "refresh_token_received_from_server"

    }

  }

}

在 support/commands.js


Cypress.Commands.add('setSession', () => {

  const accessToken = `${Cypress.env('myenv')['authResponse']['apiToken']}`

  const refreshToken = `${Cypress.env('myenv')['authResponse']['refreshToken']}`

  window.localStorage.setItem('accessToken', accessToken);

  window.localStorage.setItem('refreshToken', responseToken);

  })

});

在你的测试中


beforeEach(() => {

  cy.setSession();

})


it('Test Ui Components for Authorized User', () => {


})


查看完整回答
反对 回复 2021-06-18
  • 3 回答
  • 0 关注
  • 408 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信