npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@qavajs/core

v2.13.0

Published

qavajs framework core

Readme

npm version

@qavajs/core

@qavajs/core is the core and test runner module of the qavajs automation framework.

npm install @qavajs/core

Run tests

npx qavajs --config <config> --profile <profile>

Memory value parameter type

value parameter type provides API to access memory

When('Read memory {value}', async function(memoryValue) {
    expect(memoryValue.value()).toEqual('ts');
});

When('Set memory {value} as {string}', async function(memoryKey, value) {
    memoryKey.set(value);
});

Validation parameter type

validation parameter type provides an API to verify values by a certain condition

When('I expect {string} {validation} {string}', async function(value1, validate, value2) {
    validate(value1, value2);
});

World

Module extends CucumberJS world with additional entities

| entity | type | description | example | |-------------|----------|--------------------------------------------------|--------------------------------------------------------------------| | config | object | loaded config | this.config.parallel | | executeStep | function | programmatically execute certain step definition | await this.executeStep("I type 'username' to 'Username Input'"); | | setValue | function | set memory value | await this.setValue('key', 'value'); | | getValue | function | get memory value or expression | await this.getValue('$key'); | | validation | function | get validation function based | await this.validation('to equal'); |

Soft Validation

You can use the softly prefix before expect.

Feature: Feature

  Scenario: verify soft assert
    # first step fails, but other steps will not be skipped
    Then I expect '2' to softly equal '1'
    # pass
    And I expect '1' to softly equal '1'
    # fail
    And I expect '2' to softly equal '1'
    # skip
    And I expect '1' to softly equal '1'

Execute steps from other steps

It is possible to implement complex logic using built-in qavajs steps via executeStep world method

When('I do smth complex', async function() {
    await this.executeStep(`I type 'username' to 'Username Input'`);
    await this.executeStep(`I type 'password' to 'Password Input'`);
    await this.executeStep(`I click 'Login Button'`);
    await this.executeStep(`I fill following fields`, new DataTable([
        [ 'Order', '123' ],
        [ 'Delivery Location', 'New York' ]
    ]))
});

Execute other tests

Also, it is possible to call other test cases via executeTest world method

When('I do smth complex', async function() {
    await this.executeTest('feature/Login.feature', 'Login');
});

Override step definition

Override function provides the capability to override step implementation and avoid ambiguous exceptions

import { Override } from '@qavajs/core';

When('I do test', async function () {});

Override('I do test', async function () {
    console.log('I am overridden');
});

Fixture

Fixture provides a convenient way to prepare a test environment for specific test.

This example will open pdp page before test and clean the cart after the test

import { Fixture } from '@qavajs/core';

Fixture({ name: 'pdp', tags: '@pdp' }, async function() {
    await this.playwright.page.goto('https://my-site/pdp');
    // fixture may return function that will be executed after test
    return async function() {
        await this.playwright.page.request.get('/cleanCart');
    }
});
Feature: feature with fixture

  @pdp
  Scenario: scenario with fixture
    When I click 'qavajs T-shirt'
    And I click 'cart icon'
    Then I expect 'qavajs T-shirt cart item' to be visible

Template

Template provides a way to define step definition using Gherkin language

import { When, Template } from '@qavajs/core';

When('I click {string} and verify {string}', Template((locator, expected) => `
    I click '${locator}'
    I expect '${locator} > Value' to equal '${expected}'
`));

Test Execution Hooks

BeforeExecution and AfterExecution allow to define hooks that will be executed once before/after the whole test execution

import { BeforeExecution, AfterExecution } from '@qavajs/core';
import { Server } from './server';

const server = new Server();

BeforeExecution(async function () {
    await server.start();
});

AfterExecution(async function () {
    await server.stop();
});

Override memory values

In case if tests need to be run with updated memory value they can be passed via CLI (e.g run scenarios on some other url) It can be done by passing --memory-values parameter which is JSON with params that need to be overridden

npx qavajs --config config.ts --memory-values '{"url": "https://github.com"}'

it will override $url memory value

Pass CLI params to workers

All params that you passed to qavajs cli will be available in CLI_ARGV environment variable in all child workers.

Service

Services are entities that can execute logic before and after the whole test run.

import externalService from './externalService';

export default {
    service: [
        {
            options: {
                data: 42
            },
            before() {
                console.log(this.options.data);
            },
            after(result) {
                if (!result.success) process.exitCode = 1;
            }
        },
        {
            options: {
                data: 42
            },
            ...externalService
        }
    ]
}

There is a one-minute default timeout for the before and after test logic to prevent the entire process from freezing. To set up a custom timeout in milliseconds, use serviceTimeout property in the config file

export default {
    serviceTimeout: 1_200_000
}