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.

Acciones de Github: Ejecutar servidor y frontend, luego realizar pruebas.

Me gustaría utilizar Github Actions para CI y ejecutar pruebas antes de que la rama pueda fusionarse.

Tengo un único repositorio que contiene tanto mi servidor como mi frontend (Nest y Angular). Estoy utilizando Cypress/Jest para mis pruebas.

Necesito que mi servidor backend esté en funcionamiento para que mis pruebas de Cypress en el frontend se ejecuten correctamente. Actualmente, Github Actions no pasa a la siguiente etapa porque el proceso de backend está en ejecución, pero eso es lo que necesito que suceda…

¿Cómo debería configurarlo para poder utilizar Github Actions para CI?

name: test
on: [push]
env:
  CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  OTHER_SECRETS: ${{ secrets.otherSecrets }}
jobs:
  cypress-run:
    runs-on: macos-11
    steps:
      # iniciar cypress con acción de github: https://github.com/cypress-io/github-action
      - name: Configurar entorno Node.js
        uses: actions/setup-node@v2.5.0
        with:
          node-version: '16.13.0'
      - name: Checkout
        uses: 'actions/checkout@v2'
      - name: "Iniciar Backend"
        run: |
          cd server &&
          npm install &&
          npm run build &&
          npm run start:prod
      - name: "Iniciar Frontend"
        run: |
          npm install &&
          npm run build &&
          npm run start
      - name: Ejecutar Cypress
        uses: cypress-io/github-action@v2
        with:
          record: true
          browser: chrome
      - name: "Ejecutar pruebas Jest"
        run: |
          cd server &&
          npm run test

nota: He intentado agregar la opción “& sleep 10 & curl http://localhost:port -i” a los comandos npm y no me ha funcionado.

nota2: Es la primera vez que utilizo Github Actions, ¡así que tal vez me esté perdiendo algo obvio!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para utilizar GitHub Actions para CI y ejecutar pruebas antes de poder fusionar la rama, puede modificar el archivo YAML existente para incluir un nuevo trabajo que inicie el servidor backend antes de ejecutar las pruebas frontend de Cypress. Aquí tienes un ejemplo de archivo YAML:

    name: test
    on: [push]
    env:
      CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      OTHER_SECRETS: ${{ secrets.otherSecrets }}
    jobs:
      start-backend:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout
            uses: actions/checkout@v2
          - name: Setup Node.js environment
            uses: actions/setup-node@v2.5.0
            with:
              node-version: '16.13.0'
          - name: Install dependencies
            run: |
              cd server
              npm install
          - name: Start backend server
            run: |
              cd server
              npm run start:dev &
              echo $! > .pidfile
          - name: Wait for backend server to start
            run: |
              cd server
              npm run wait-for-backend
      cypress-run:
        runs-on: macos-11
        steps:
          - name: Checkout
            uses: 'actions/checkout@v2'
          - name: Setup Node.js environment
            uses: actions/setup-node@v2.5.0
            with:
              node-version: '16.13.0'
          - name: Install dependencies
            run: npm install
          - name: Wait for backend to start
            run: |
              cd server
              npm run wait-for-backend
          - name: Cypress run
            uses: cypress-io/github-action@v2
            with:
              record: true
              browser: chrome
          - name: "Run Jest Tests"
            run: |
                cd server
                npm run test
    

    En este archivo, hemos añadido un nuevo trabajo llamado start-backend antes del trabajo cypress-run. Este trabajo se ejecuta en una máquina Ubuntu y realiza los siguientes pasos:

    1. Revisa el repositorio
    2. Configura el entorno de Node.js
    3. Instala las dependencias del backend
    4. Inicia el servidor backend usando npm run start:dev &
      • El símbolo & ejecuta el comando en segundo plano, lo que nos permite pasar al siguiente paso
      • Guardamos el ID del proceso para usarlo más adelante en un archivo llamado .pidfile
    5. Espera a que el servidor backend se inicie usando npm run wait-for-backend
      • Este comando verifica periódicamente el punto final del backend hasta que responda con un código de estado 200
      • Una vez que el punto final sea accesible, el trabajo pasará al siguiente trabajo

    En el trabajo cypress-run, hemos añadido un paso para esperar a que el backend se inicie antes de ejecutar las pruebas de Cypress. Esto asegura que el backend esté en funcionamiento antes de que Cypress intente interactuar con él.

    Con esta configuración, tu flujo de trabajo debería avanzar al siguiente paso después de iniciar el servidor backend en el trabajo start-backend, lo que permite que tus pruebas frontend de Cypress se ejecuten correctamente.

Comments are closed.