Skip to content

@metrics/test-consumer

This module is a memory based consumer for metrics streams to be used in tests. The purpose of the module is to make writing tests and asserting metrics easier. It takes a metric stream generated by @metrics/client and makes the collected metrics available as an array.

⚠️ You should never use this in production code, however it is very convenient when writing tests which produce metrics using @metrics/client.

Examples usage

Below is a sample test showing how this could be used:

const assert = require("node:assert");
const { test } = require("node:test");
const MetricsClient = require("@metrics/client");
const TestConsumer = require("@metrics/test-consumer");
test("some test case", async () => {
// Pass in the metrics client you want to consume.
const metrics = new MetricsClient();
const testHelper = new TestConsumer(metrics);
// Sets up the consumer to capture events.
testHelper.start();
// 👋 Your code which produces some kind of metric goes here.
// Ends the streams, now we can get the result.
testHelper.stop();
const result = await testHelper.getResults();
const metric = result.find((m) => m.name === "some_counter");
assert.ok(metric, "Expected to find metric some_counter");
assert.equal(metric.value, 2);
});

API

constructor(metrics)

Takes an instance of @metrics/client to collect metrics from.

.start()

Creates a readable stream which listens for metrics produced by the client.

.stop()

Ends the stream setup for the client, returns a Promise which resolves to an array with the metrics consumed.

async .getResults()

Returns a promise which resolves to an array containing collected @metrics/metric objects.

createMetrics

Utility object with functions for creating mock Metric objects, has the functions .timer and .counter.