@nokkel/testing
TypeScript icon, indicating that this package has built-in type declarations

0.1.2 • Public • Published

Nokkel Testing Library

A typescript testing library for Koa APIs or Cypress e2e testing. This library provides useful helper Typescript Jest configuration, functions and classes for mocking and generating values for your tests.

Using this library

You can install this library using the following command

npm add -D @nokkel/testing jest jest-junit ts-jest ts-node

It is also recommended to install the following typing for your typescript project

npm add -D @types/jsonwebtoken @types/jest @types/koa @types/node

Once installed you can configure Jest by adding the following files to your project

jest.config.ts

import type { Config } from 'jest';
import { pathsToModuleNameMapper } from 'ts-jest';

import baseConfig from '@nokkel/testing/dist/jest.config';

import { compilerOptions } from './tsconfig.json';

const config: Config = {
  ...baseConfig,
  moduleNameMapper: pathsToModuleNameMapper(compilerOptions.paths),
  modulePaths: [compilerOptions.baseUrl],
};

export default config;

Testing with kafka

In your test file where you need to test for events, add the following test case:

import { KafkaClient, KafkaMessage } from '@nokkel/testing';
import Chance from 'chance';


const EXPECTED_EVENTS: any[] = [];

const KAFKA = new KafkaClient(
  {
    clientId: config.event.clientId,
    brokers: config.event.brokers,
    logLevel: config.event.logLevel,
  },
  {
    groupId: CHANCE.string(),
  }
);

const CONSUMER = KAFKA.client;

describe(`${YOUR_EVENT_TOPIC} events`, () => {
  beforeEach(async () => {
    await KAFKA.setupClient([YOUR_EVENT_TOPIC]);
    await CONSUMER.connect();
  });

  afterAll(async () => {
    await KAFKA.tearDownTopics([YOUR_EVENT_TOPIC]);
    await CONSUMER.disconnect();
    await CONSUMER.stop();
  }, 10000);

  it('should have been published', async () => {
    const messages: KafkaMessage[] = [];

    KAFKA.consumeMessages(messages);
    await KAFKA.waitForMessages(messages);

    expect(messages).toEqual(
      expect.arrayContaining(
        EXPECTED_EVENTS.map(userPersona => {
          return {
            topic: YOUR_EVENT_TOPIC,
            message: expect.objectContaining({
              value: userPersona,
            }),
          };
        })
      )
    );
  }, 10000);
});

Where your default.yaml config file should have this:

event:
  clientId: account-api
  brokers:
    - localhost:9092
  logLevel: 0 # 0 = NOTHING, 1 = ERROR, 2 = WARN, 4 = INFO, 5 = DEBUG
  ssl: false

and custom-environment-variables.yaml should have this:

event:
  clientId: APP_NAME
  brokers:
    __name: EVENT_BROKERS
    __format: json
  ssl: EVENT_SSL
  logLevel: EVENT_LOG_LEVEL

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 0.1.2
    7
    • latest

Version History

  • Version
    Downloads (Last 7 Days)
    • Published
  • 0.1.2
    7
  • 0.1.1
    0
  • 0.1.0
    6
  • 0.0.0
    29

Package Sidebar

Install

npm i @nokkel/testing

Weekly Downloads

42

Version

0.1.2

License

MIT

Unpacked Size

59.6 kB

Total Files

40

Last publish

Collaborators

  • nokkel-developer
  • chiara-nokkel
  • cshaw
  • rdder
  • chrisddonaldson_nokkel
  • monikamistry_nokkel
  • curtishuangnokkel