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.
Key Features:
- βοΈ ZERO Config β You wonβt need any global setup or teardown scripts.
- π₯ BRUTALLY FAST β Up to β‘110x fasterβ‘ than traditional setups. Yes, you read that right.
- π‘οΈ Isolated β No more conflicts with local file systems. Everythingβs clean.
- π Scalable β Run your tests in parallel, no matter how big your project.
- π Optimized β We cache everything we can, so your tests run faster over time.
- β‘ Developer Experience β Streamlined and simplified. You focus on the code, we handle the setup.
- π§ͺ Easier Debugging β Debugging e2e tests is now a piece of cake π°.
| 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% |
| Default Test Architecture | Decoupled Test Architecture |
|---|---|
![]() |
![]() |
| Default Task Architecture | Decoupled Task Architecture |
|---|---|
![]() |
![]() |
| Default Testing Dx | Cacheable Testing Dx |
|---|---|
![]() |
![]() |
| Default Debug Dx | Excellent Debug Dx |
|---|---|
![]() |
![]() |
Note
Your configured targets now has a new dependency configured:
{
"name": "utils-e2e",
"targets": {
"e2e": {
"dependsOn": [
// dynamically added
{ "target": "env-setup", "params": "forward" }
]
// ...
}
}
// ...
}Let the plugin detect your implicit dependencies:
// projects/utils-e2e/project.json
{
"name": "utils-e2e",
"implicitDependencies": ["utils"]
}nx run utils-e2e:e2eTadaaaa! π Youβre now testing at light speed!
| 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. |
Out of the box, all library-type projects get these targets:
nx-verdaccio--pkg-publishnx-verdaccio--pkg-install
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"]
// ...
}Want more control over which projects get their environments set up?
{
"plugins": [
{
"plugin": "@push-based/nx-verdaccio",
"options": {
"environments": {
"targetNames": ["e2e", "e2e-static"]
}
}
}
]
}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:
- Run the E2E test for
utils-e2e:
nx run utils-e2e:e2e - Run E2E with specific environments:
nx run utils-static-e2e:e2e --environmentRoot static-environments/user-lists
The inferred Nx targets are prefixed by nxv-, e.g. nxv-e2e will run your test target (by default e2e) and ensure cleanup is done afterwards (nxv-teardown).
Other inferred targets include nxv-env-setup, nxv-env-bootstrap, nxv-env-install, nxv-pkg-install, nxv-verdaccio-start, etc.
You can find all these targets in the Nx graph (run npx nx graph).
You may prefer to infer different target names, e.g. so you can run e2e-test instead of nxv-e2e. All target names may be customized for both environment and package targets.
{
"plugins": [
{
"plugin": "@push-based/nx-verdaccio",
"options": {
"environments": {
"inferredTargets": {
"e2e": "e2e-test", // default is "nxv-e2e"
"setup": "e2e-test-setup" // default is "nxv-e2e-setup"
}
},
"packages": {
"inferredTargets": {
"install": "npm-install" // default is "nxv-pkg-install"
}
}
}
}
]
}This is a first draft of how the benchmarks will look. ATM the data set it not big enough.
β οΈ 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 |








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