在 Cypress 中设置本地存储

对于我们的一个应用程序,我需要设置本地存储以绕过登录页面过程。


我有以下函数将返回我需要设置的 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”。这些值都不存在。


忽然笑
浏览 409回答 3
3回答

慕田峪9158850

每次测试运行(服务器和客户端)的成本资源时都点击登录 API这是优化的方式:只需在 Cypress Env 中存储登录/身份验证 API 成功响应并在命令函数中重用它在 cypress.json{  "myenv": {    "authResponse": {      "apiToken": "jwt_token_received_from_server",      "refreshToken": "refresh_token_received_from_server"    }  }}在 support/commands.jsCypress.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', () => {})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript