devise-jwt 在身份验证之前生成令牌?

devise-jwt generating token before authentication?

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

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

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

我讨厌只用一个用户为数据库播种,因为我试图将依赖性保持在最低限度并尽可能地测试原子性。有什么方法可以通过设计和在我的测试中以某种方式使用它来“grab/generate”身份验证令牌吗?

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

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

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}` }
  ...
})