Skip to content

Latest commit

 

History

History
126 lines (89 loc) · 4.57 KB

TESTING.md

File metadata and controls

126 lines (89 loc) · 4.57 KB

Testing

Unit Tests

We are using Vitest.

Simply run pnpm test to run all the tests locally.

Integration Tests

We are using Vitest to test the following concerns:

  1. Main application flows and integration of different services
  2. Containerize execution of all services
  3. Cross-service network calls

Integration tests are based pre-built Docker images, so you can run it in 2 modes:

Running from built artifact (Docker)

**To run integration tests locally with a built artifact, you need to build a Docker image for the services. **

Use pnpm integration:prepare command to set up the complete environment from locally running integration tests.

And then, to run the tests, use the following:

pnpm test:integration

Make sure to run the prepare command every time you change your code.

Running from source code (local services)

You can also run integration tests against the local-running services, during development.

To do so, use the following instructions:

  1. Run Hive from VSCode (using Start Hive button).
  2. Make sure all services are running correctly.
  3. Run integration tests with pnpm dev:integration command (from root directory).

Running from Pre-Built Docker Image

To run integration tests locally, from the pre-build Docker image, follow:

  1. Install all deps: pnpm i

  2. Generate types: pnpm graphql:generate

  3. Build only addition, local CF Workers source code, by running: pnpm --filter integration-tests prepare:env

  4. Decide on the commit ID / Docker image tag you would like to use (make sure build-and-dockerize is done successfully)

  5. Set the needed env vars, and use Docker Compose to run all local services:

    export DOCKER_REGISTRY="ghcr.io/graphql-hive/"
    export DOCKER_TAG=":IMAGE_TAG_HERE"
    
    docker compose -f ./docker/docker-compose.community.yml -f ./integration-tests/docker-compose.integration.yaml --env-file ./integration-tests/.env up -d --wait
  6. Run the tests: pnpm --filter integration-tests test:integration

E2E Tests

We use Cypress. Any file that ends with .cy.ts is an E2E test.

Running Against Local Development Services

  1. Run the development setup as usual.
  2. Run pnpm test:e2e:local

Running Against Locally Built Docker Images

  1. Make sure you have Docker installed. If you are having issues, try to run docker system prune to clean the Docker caches.
  2. Install all deps: pnpm i
  3. Move into the cypress folder (cd cypress)
  4. Run ./local.sh for building the project and starting the Docker containers
  5. Follow the output instruction from the script for starting the tests

Running Against Pre-Built Docker Images

  1. Make sure you have Docker installed. If you are having issues, try to run docker system prune to clean the Docker caches.
  2. Install all deps: pnpm i
  3. Generate types: pnpm graphql:generate
  4. Build source code: pnpm build
  5. Decide on the commit ID / Docker image tag you would like to use and set it as env var:
    export DOCKER_REGISTRY="ghcr.io/graphql-hive/"
    export DOCKER_TAG=":IMAGE_TAG_HERE"
  6. Run the e2e environment, by running:
    docker compose \
      -f ./docker/docker-compose.community.yml \
      -f ./docker/docker-compose.end2end.yml \
      --env-file ./integration-tests/.env \
      up -d --wait
    
  7. Run Cypress: pnpm test:e2e

Docker Compose Configuration

Keep in mind that integration tests are running a combination of 2 Docker Compose files:

  1. docker-compose.community.yml - this is also used for self-hosting Hive, so this file contains all services and configurations needed for running Hive core (without Cloud-specific services, like billing).
  2. docker-compose.integration.yaml - An extension and overrides file: we are using that file to run local services such as CloudFlare CDN mock, external composition service and so on - this is done in order to mock a complete Hive Cloud environment and test all features. This file also includes overrides such as environment variables that are specific only for integration testing - so make sure to choose wisely where to add environment variables!

Troubleshoot

If you are having issues with running Docker images, follow these instructions:

  1. Make sure you have the latest Docker installed.
  2. Make sure no containers are running (docker ps and then docker stop CONTAINER_ID).
  3. Delete the local volume used for testing, it's located under .hive directory.
  4. Try to run docker system prune to clean all the Docker images, containers, networks and caches.