Cypress API登录后无法重定向至首页问题求助
问题排查与修复方案
1. 修正拼写错误
你的代码中存在变量拼写错误:
const exp = response.body.data.ext;
接口返回的字段是exp,这里误写为ext,导致localStorage.setItem('exp', exp)存入的是undefined。前端路由守卫可能因exp无效判定token过期,触发登录页重定向。
修改为:
const exp = response.body.data.exp;
2. 调整localStorage操作方式
直接调用window.localStorage可能存在上下文问题,Cypress中推荐通过cy.window()获取当前页面的window对象后再操作:
cy.window().then(win => { win.localStorage.setItem('jwt', jwt); win.localStorage.setItem('refreshToken', refreshToken); win.localStorage.setItem('exp', exp); });
3. 移除多余的前置页面访问
beforeEach中的cy.visit('/home')属于冗余操作,会在测试用例执行前强制跳转至/home,干扰后续路由逻辑,直接删除该行即可。
4. 简化测试用例的访问逻辑
前端页面的路由校验通常读取localStorage中的token,而非请求头。测试用例无需在cy.visit中添加Authorization头,直接访问目标页面:
it('Visit /users page with valid authentication', () => { cy.visit('/users/'); cy.url().should('contain', '/users'); });
完整修正后的代码
beforeEach钩子
beforeEach(() => { cy.request({ method: 'POST', url: 'https://some-page/api/v1/auth/login', body: { email: 'some-email@mail.com', password: 'password' } }).then((response) => { const jwt = response.body.data.jwt; const refreshToken = response.body.data.refreshToken; const exp = response.body.data.exp; // 修正拼写 cy.wrap(jwt).as('authToken'); Cypress.env('AUTH_TOKEN', jwt); // 正确操作localStorage cy.window().then(win => { win.localStorage.setItem('jwt', jwt); win.localStorage.setItem('refreshToken', refreshToken); win.localStorage.setItem('exp', exp); }); }); })
测试用例
it('Visit /users page with valid authentication', () => { cy.visit('/users/'); cy.url().should('contain', '/users'); });
额外排查点
若修改后问题仍存在,可检查:
- 前端路由守卫是否有其他校验逻辑(比如是否需要存入
iat字段到localStorage) - 登录接口返回的
jwt是否未过期,可在then中打印response.body验证所有字段值 - 测试环境是否与前端认证逻辑匹配(比如是否有其他cookie或session需要设置)
内容的提问来源于stack exchange,提问作者fore124asdo
相关产品推荐
相关产品推荐

