Как передать значение переменной в URL с помощью кипариса

Я работаю над задачей 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» в качестве значения для конечной точки. Может ли кто-нибудь помочь здесь?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
98
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

Где я должен использовать ваш кусок использования? Я новичок в javascript и кипарисе. Я хочу создать этот URL-адрес localhost:8080/user/52 вместо localhost:8080/user/[object%20Object]

Ab123 25.11.2022 12:38

это только для пользователя/52? или номер может меняться в зависимости от пользователя, вошедшего в систему?

Delano van londen 25.11.2022 13:18

В настоящее время значение 52 является постоянным, и мне нужно получить к нему доступ из БД.

Ab123 28.11.2022 08:16

Ваша ошибка в значительной степени говорит обо всем. 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

Ab123 28.11.2022 08:14

Забыл, что ваша задача вернула массив объектов.

jjhelguero 28.11.2022 17:20

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

Ab123 28.11.2022 08:20
Ответ принят как подходящий

Я могу решить свою проблему, используя этот подход

Ниже мой файл спецификаций:

    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'
    },
  }
})

Другие вопросы по теме