Я работаю над задачей Cypress API Automation и хочу передать значение конечной точке. Я получил значение из базы данных postgress и сохранил его в переменной с именем user_id. Но я столкнулся с проблемой при попадании в конечную точку.
Значение, полученное из базы данных:
журнал[{user_id: 52}]
Проблема:
cy.request() failed on:
http://localhost:8080/user/[object%20Object]
The response we received from your web server was:
Ниже мой код
it.only('Delete User', ()=>{
let user_id = cy.task("connectDB","select user_id from user_details where first_name='XYZ'").then(cy.log);
cy.request({
method:'DELETE',
url:'localhost:8080/user/'+user_id+''
}).then((res) => {
expect(res.status).to.eq(200);
})
})
Я хочу передать «52» в качестве значения для конечной точки. Может ли кто-нибудь помочь здесь?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


cy.url().should('include', '/user_id')
документы: https://docs.cypress.io/api/commands/url#Differences
или, если это не помогло, попробуйте посмотреть эти документы: https://docs.cypress.io/guides/guides/environment-variables#Option-1-configuration-file
это только для пользователя/52? или номер может меняться в зависимости от пользователя, вошедшего в систему?
В настоящее время значение 52 является постоянным, и мне нужно получить к нему доступ из БД.
Ваша ошибка в значительной степени говорит обо всем. user_id — это объект. Вам нужно будет получить доступ к свойству, чтобы передать правильное значение, которое будет user_id[0].user_id
it.only('Delete User', ()=>{
let user_id = cy.task("connectDB","select user_id from user_details where first_name='XYZ'").then(cy.log);
cy.request({
method:'DELETE',
url:'localhost:8080/user/'+ user_id[0].user_id
}).then((res) => {
expect(res.status).to.eq(200);
})
})
Пробовал этот, но не работает. Получил эту ошибку. Ошибка cy.request(): localhost:8080/user/undefined Ответ, который мы получили от вашего веб-сервера: > 400: Bad Request
Забыл, что ваша задача вернула массив объектов.
cy.task() необходимо использовать .then(), чтобы получить значение, как в этом примере.
cy.task("connectDB", "select user_id from user_details where first_name='XYZ'")
.then(user_id => {
cy.request({
method: 'DELETE',
url: 'localhost:8080/user/' + user_id
}).then((res) => {
expect(res.status).to.eq(200) // passes
})
})
Если вы попытаетесь присвоить возврат переменной let user_id = cy.task("connectDB"..., вы получите объект цепочки, но без .then() для извлечения значения не так много пользы.
Реализовал ваш способ, получая ту же ошибку. it.only('УДАЛИТЬ ПОЛЬЗОВАТЕЛЯ',()=>{ cy.task("connectDB", "выбрать user_id из user_details, где first_name='XYZ'") .then(user_id => { cy.request({ method: ' DELETE', url: 'localhost:8080/user/' + user_id }).then((res) => { expect(res.status).to.eq(200) }) }) })
Я могу решить свою проблему, используя этот подход
Ниже мой файл спецификаций:
it("Database Test", () => {
cy.task("READFROMDB",
{
dbConfig: Cypress.config('DB'),
sql:'select * from "user_details"'
}).then((result) =>
{
//console.info(result.rows)
let user_id = result.rows[0].user_id
console.info("user id is :"+user_id)
})
});
Ниже мой файл Cypress.config.js:
const {defineConfig} = require("cypress");
const pg= require("pg")
module.exports = defineConfig({
e2e:{
setupNodeEvents(on,config){
on("task",{
READFROMDB({dbConfig,sql}){
const client = new pg.Pool(dbConfig);
return client.query(sql);
}
})
},
DB:{
user: "postgres",
password: "password",
host: "localhost",
database: "postgres",
port: '5432'
},
}
})
Где я должен использовать ваш кусок использования? Я новичок в javascript и кипарисе. Я хочу создать этот URL-адрес localhost:8080/user/52 вместо localhost:8080/user/[object%20Object]