es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Dramaturgo: compartiendo estado entre pruebas

Estoy aprendiendo Playwright y JavaScript al mismo tiempo, por lo que esta puede ser una pregunta básica: me pregunto cómo recomendarían compartir un estado, como una variable customerId, entre pruebas.

Ejemplo:

test.describe.only('Generar un nuevo cliente', () => {
  let customerId
  let baseUrl = process.env.SHOP_URL

  test('Crear un nuevo cliente', async ({ request }) => {
    const response = await request.post(baseUrl + `/shopify/v5/customer`, {})

    const responseBody = JSON.parse(await response.text())
    expect(response.status()).toBe(200)
    customerId = responseBody.customerId //necesito persistir customerId para pasarlo a la prueba siguiente

  })

  test('Actualizar los detalles del cliente', async ({ request }) => {
     const response = await request.post(baseUrl + `/shopify/v5/customer/update`, {})
      {
        data: {
          customerId: customerId, //customerId está indefinido aquí
          name: "Fred"
        },
      }
    )
    expect(response.status()).toBe(200)
  })
})

El customerId está claramente fuera del alcance en la segunda prueba. Probablemente reestructuraré esto para usar una biblioteca como Axios, ya que estoy utilizando las pruebas de Playwright para generar datos, no estoy probando realmente la API aquí. Mientras tanto, solo necesito que el customerId se mantenga en las llamadas de API posteriores.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Hay varias formas de compartir estado entre pruebas en Playwright y JavaScript. Un enfoque es utilizar un archivo o módulo separado para almacenar el estado compartido como una variable global que puede ser importada y accedida por cada prueba. Alternativamente, podrías utilizar un ejecutor de pruebas como Jest, que provee soporte incorporado para funciones de configuración y eliminación de pruebas que se pueden utilizar para establecer y eliminar el estado compartido entre pruebas.

    Por ejemplo, utilizando un módulo separado para almacenar el estado customerId:

    // state.js
    let customerId;
    
    module.exports = {
      setCustomerId(id) {
        customerId = id;
      },
      getCustomerId() {
        return customerId;
      }
    }
    
    // tests.js
    const state = require('./state');
    let baseUrl = process.env.SHOP_URL
    
    test.describe.only('Generar un nuevo cliente', () => {
      test('Crear nuevo cliente', async ({ request }) => {
        const response = await request.post(baseUrl + `/shopify/v5/customer`, {})
    
        const responseBody = JSON.parse(await response.text())
        expect(response.status()).toBe(200)
        state.setCustomerId(responseBody.customerId)
      })
    
      test('Actualizar detalles del cliente', async ({ request }) => {
        const customerId = state.getCustomerId();
        const response = await request.post(baseUrl + `/shopify/v5/customer/update`, {
          data: {
            customerId: customerId,
            name: "Fred"
          }
        })
        expect(response.status()).toBe(200)
      })
    })
    

    En este ejemplo, definimos un módulo state que exporta dos funciones para establecer y obtener el estado customerId. Luego importamos este módulo en nuestro archivo de prueba y utilizamos state.setCustomerId para establecer el estado en la primera prueba, y state.getCustomerId para recuperar el estado en la segunda prueba. De esta manera, el estado customerId se mantiene entre las pruebas.

    Ten en cuenta que este es solo un enfoque y existen muchas otras formas de compartir estado entre pruebas en Playwright y JavaScript. El mejor enfoque dependerá de tu caso de uso específico y el marco de pruebas que estés utilizando.

Comments are closed.