push-based / nx-verdaccio

Enterprise E2E setup for Nx and Verdaccio
MIT License
12 stars 1 forks source link

Enterprise Grade Testing with Verdaccio and Nx

πŸš€ Enterprise Grade Testing with Verdaccio and Nx ⚑

version release date license commit activity CI

Welcome to the Verdaccio Testing Environments Nx Plugin β€” your one-stop solution for running blazingly fast, isolated, and scalable end-to-end (e2e) tests with zero configuration. Yeah, you heard that right: ZERO configuration.

With this plugin, say goodbye to the old days of waiting around for your tests and hello to next-level speed. Plug it in, and you're good to go.

Why You NEED This Plugin πŸ”₯

Key Features:


🏎️ Speed Benchmarks πŸ•’οΈ

Small Project (4 packages) Common Setup Optimized Setup [x] times faster [%] percent faster
Worst Case Execution Time 110 s 13 s 8.46x faster 746%
Best Case Execution Time 110 s 1 s 110x faster 11000%

πŸ§ͺ Test Architecture Comparison πŸ“

Default Test Architecture Decoupled Test Architecture
test-architecture-bad.png test-architecture--schema-good.png

πŸ”— Tasks Architecture Comparison πŸ“

Default Task Architecture Decoupled Task Architecture
task-architecture-bad.png task-architecture--schema-good.png

πŸ”— Testing Dx Comparison πŸ€“

Default Testing Dx Cacheable Testing Dx
testing-dx--schema-bad.png testing-dx--schema-good.png

πŸ”— Debug Dx Comparison 🐞

Default Debug Dx Excellent Debug Dx
debug-dx--schema-bad.png debug-dx--schema-good.png

Getting Started 🏁

Step 1: Register and Configure in nx.json:

{
  "plugins": [
    {
      "plugin": "@push-based/nx-verdaccio",
      "options": {
        "environments": {
          "environmentsDir": "tmp/environments", // Optional
          "targetNames": ["e2e"] // Optional
        }
      }
    }
  ]
}

[!NOTE] Your configured targets now has a new dependency configured:

{
  "name": "utils-e2e",
  "targets": {
    "e2e": {
      "dependsOn": [
        // dynamically aded
        { "target": "env-setup", "params": "forward" }
      ]
      // ...
    }
  }
  // ...
}

Optional: Add the Package Under Test as implicitDependency (OPTIONAL)

Let the plugin detect your implicit dependencies:

// projects/utils-e2e/project.json
{
  "name": "utils-e2e",
  "implicitDependency": ["utils"]
}

Step 3: Run the E2E Test

nx run utils-e2e:e2e

Tadaaaa! πŸŽ‰ You’re now testing at light speed!

Configuration Options πŸ› οΈ

Name type description
environments.environmentsDir string (DEFAULT 'tmp/environments') Directory for environment storage.
environments.targetNames string[] (REQUIRED) Target names for environment-based projects.
environments.filterByTag string[] (REQUIRED) Only consider projects with these tags for environment setup.
publishable.filterByTag string[] (REQUIRED) Only consider projects with these tags for publishing targets.

Fine-Grained Control for Publishable Projects πŸš€

Out of the box, all library-type projects get these targets:

But if you want to narrow it down:

{
  "plugins": [
    {
      "plugin": "@push-based/nx-verdaccio",
      "options": {
        "packages": {
          "filterByTags": ["publishable"]
        }
      }
    }
  ]
}

Tag your projects accordingly:

// projects/utils/project.json
{
  "name": "utils",
  //
  "tags": ["publishable"]
  // ...
}

Custom Test Environment Setup πŸ§ͺ

Filter by target names

Want more control over which projects get their environments set up?

{
  "plugins": [
    {
      "plugin": "@push-based/nx-verdaccio",
      "options": {
        "environments": {
          "targetNames": ["e2e", "e2e-static"]
        }
      }
    }
  ]
}

Filter by tags

Filter projects by tags to apply environment setup:

{
  "plugins": [
    {
      "plugin": "@push-based/nx-verdaccio",
      "options": {
        "environments": {
          "filterByTags": ["npm-env"]
        }
      }
    }
  ]
}

Tag those projects accordingly:

// projects/utils/project.json
{
  "name": "lib-e2e",
  //
  "tags": ["npm-env"]
  // ...
}

Example Usage:

Benchmarks

This is a first draft of how the benchmarks will look. ATM the data set it not big proper.

[!warn] The data is a first draft of the structure and does not reflect a clean data set. Work on the real benchmark data in progress

cli:e2e Common Optimized [x] times faster [%] percent faster
Execution Time - Worse case 110 s 13 s 8.46 times faster 746%
Execution Time - Best case 110 s 1 s 110 11000%
Download Volume 381 MB 381 MB 0% 0%
Cacheable ❌ βœ… n/a n/a
Graph Nodes 1 13 n/a n/a
Parallelism ❌ βœ… n/a n/a

Next Steps

Stay Connected! πŸ”—