【问题标题】:devise-jwt generating token before authentication?devise-jwt 在身份验证之前生成令牌?
【发布时间】:2021-11-02 04:19:48
【问题描述】:

所以我正在使用Cypress 编写 e2e 自动化测试。为了使我的测试保持原子性,我尝试为特定测试生成所需的数据。

例如,我尝试从一个干净的数据库开始(运行迁移)并通过赛普拉斯 API 请求生成一个用户。

问题是使用 devise-jwt 我需要发送身份验证:bearer 令牌连同它。通常这是在登录时生成的。所以问题就在这里:要发出POST 请求来创建用户,我需要使用令牌进行身份验证....但没有用户登录并获取令牌我不知道是什么令牌将是。

我讨厌只使用一个用户来为数据库播种,因为我试图保持最小的依赖关系并尽可能地测试原子。有没有办法通过设计“获取/生成”身份验证令牌并以某种方式在我的测试中使用它?

这是一个 Rails/React 应用程序。

【问题讨论】:

    标签: ruby-on-rails automation devise cypress


    【解决方案1】:

    我不知道获取 devise-jwt 令牌的工作流程,但如果它产生 cookie、sessionStorage 或 localStorage 值,您可以使用 cy.session() 保留它。

    Cypress.config('experimentalSessionSupport', true)
    
    beforeEach(() => {                   
      cy.session('mySession', () => {
    
        // this "setup" callback is called once only, 
        // thereafter results are returned from cache
    
        // actions to seed database, get user data
    
        const window = cy.state('window')
        window.fetch(LOGIN_URL, dataWithLoginInfo).then(response => {
          const jwt = response.headers.get('Authorization').split('Bearer ')[1];
          window.sessionStorage.setItem('jwt', jwt)  // this is now cached - same token each time
        })
      })
    })
    
    it('uses jwt token', () => {
      const token =  cy.state('window').sessionStorage.getItem('jwt')
      const headers = { Authorization: `Bearer ${token}` }
      ...
    })
    

    【讨论】:

      猜你喜欢
      • 2020-10-24
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 2018-03-04
      • 2020-07-07
      相关资源
      最近更新 更多