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 produciton 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 test = require('tap');
const Metrics = require('@metrics/client');
const TestConsumer = require('@metrics/test-consumer');
test('some test case', async () => {
const metrics = new Metrics();
// This sets up the metrics client to be used
const testHelper = new TestConsumer(metrics)
// .start sets up the stream
testHelper.start();
// Code which triggers a count metric
testHelper.stop(); // .stop ends the streams and now we can get the result.
testHelper.getResults().then(result => {
t.equal(result.name, "some_counter"); // Validate our metrics was collected
res.labels.forEach((metricLabel) => {
if (metricLabel.name === "value") {
t.equal(metricLabel.value, 2); // We expect two counts to have happened
}
});
});
});

API

constructor(metrics)

Takes in the @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/metrics](https://metrics-js.github.io/reference/metric/) objects.

createMetrics

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