[英]NodeJs using Request Promise to call external API, Saving data from the response body
[英]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.