繁体   English   中英

从数据库中保存数据,然后在柏树的 API 中使用它

[英]Saving data from DB and then using it in body for API in cypress

我正在尝试从数据库中保存一个令牌并在正文中的下一个 API 请求中传递该令牌我已经编写了以下代码,但它不起作用,请帮忙。

 it.only('Change Password', () => { cy.ResetPassAPI(globalThis.data.dradminemail);// this generates a token in DB const resetoken = cy.task( 'queryDb', `select _Token from tokens WHERE _Member_Id = 25372 and _Token_Type = "resetPassword" ORDER BY _id DESC LIMIT 1`,); // saving the token from DB generate from above cy.request({ method: 'PATCH', url: 'https://xxx/xx/xx/changePasswordWithToken', body: { confirmPassword: 'xxx', password: 'xx', token: resetoken, //passing the saved token from database uid: 1234, }, }); });

您可以为此使用Cypress.env()

it.only('Change Password', () => {
  cy.ResetPassAPI(globalThis.data.dradminemail) // this generates a token in DB
  const resetoken = cy.task(
    'queryDb',
    `select _Token from tokens WHERE _Member_Id = 25372 and _Token_Type = "resetPassword" ORDER BY _id DESC LIMIT 1`
  ) // saving the token from DB generate from above
  Cypress.env('token', resetoken.slice(12,48))

  cy.request({
    method: 'PATCH',
    url: 'https://xxx/xx/xx/changePasswordWithToken',
    body: {
      confirmPassword: 'xxx',
      password: 'xx',
      token: Cypress.env('token'), //passing the saved token from database
      uid: 1234,
    },
  })
})

切片后: 切片后

您的cy.task()语法错误

代替

const resetoken = cy.task(...)

它应该是

cy.task(...).then(resetoken => {

全面测试:

it('Change Password', () => {
  cy.ResetPassAPI(globalThis.data.dradminemail);
  const query = 'select _Token from tokens WHERE _Member_Id = 25372 and _Token_Type = "resetPassword" ORDER BY _id DESC LIMIT 1';
  cy.task('queryDb', query)
    .then(queryResult => {
      const resetoken = queryResult._Token;
      cy.request({
        method: 'PATCH',
        url: 'https://xxx/xx/xx/changePasswordWithToken',
        body: {
          confirmPassword: 'xxx',
          password: 'xx',
          token: resetoken,  
          uid: 1234,
        },
      });
    });
});

发送 PATCH 后,您可能在其他任何地方都不需要该令牌。

您可以将其保存为别名,然后通过调用别名或在function(){}中使用this关键字而不是箭头函数() => {}来访问它

// use function{} instead of () => {}
it.only('Change Password', function() {
    cy.ResetPassAPI(globalThis.data.dradminemail)
    cy.task(
      'queryDb',
      `select _Token from tokens WHERE _Member_Id = 25372 and _Token_Type = "resetPassword" ORDER BY _id DESC LIMIT 1`,)
      // task returns token so we save it with alias
      .as('resetToken')

    

    cy.request({
      method: 'PATCH',
      url: 'https://xxx/xx/xx/changePasswordWithToken',
      body: {
        confirmPassword: 'xxx',
        password: 'xx',
        token: this.resetToken, 
        uid: 1234,
      },
    })
  })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM