JSPM

jest-to-log

1.1.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • 0
  • Score
    100M100P100Q29856F
  • License MIT

Test log messages with jest

Package Exports

  • jest-to-log
  • jest-to-log/src/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (jest-to-log) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

jest-to-log

What

Test log messages with jest

Why?

Grown out of the need to test console.log/error messages or writes to process.stdout/stderr in my cli-facing apps. Note: this is not a full-blown cli-testing tool, but a check for important log messages from your app that's tested with jest.

Usage

require("jest-to-log");
//or
import "jest-to-log";

Example

//in jest test file
require("jest-to-log");

describe("toLog", () => {

  it("should capture log messages", () => {

    function testFn() {

      console.info("Jello", 1);
      console.log("Jello", 2);
      console.debug("Jello", 3);
    }
    
    const expectedString =
      "Jello 1" + "\n" + "Jello 2" + "\n" + "Jello 3" + "\n";

    expect(testFn).toLog(expectedString);
  });
});

Async Example

When an async function is tested, the expect assertions must be awaited.

//in jest test file (esm)
import("jest-to-log");

describe("process.stdout.write", () => {

  it("should capture process.stdout.write messages", async () => {

    async function asyncTestFn() {

      await new Promise((resolve) => {

        setTimeout(() => {
          process.stdout.write(`Jello 123\n`);
          process.stdout.write(`Jello 456\n`);

          resolve();

        }, 500);
      });
    }

    const expectedString = "Jello 123" + "\n" + "Jello 456" + "\n";

    await expect(asyncTestFn).toLog(expectedString);
  });
});

Caveat

  • When using with typescript (i.e., ts-jest and @types/jest), it's advised to explicitly import the expect from @jest/globals to avoid type conflicts:
//test.ts

import { expect } from "@jest/globals";

// ...your test
  • Do NOT set the injectGlobals jest option to false, or else a ReferenceError will be thrown. This is because the matchers are extended onto the expect object without importing it from @jest/globals.

Matchers

Matcher Name Description
toLog Checks if a function logs a message via console.log(), console.info() or console.debug().
toLogStdout Checks if a function explicitly writes to process.stdout. Cannot be used to capture console.log/info/debug calls due to the custom console implementation of jest.
toLogStderr Checks if a function explicitly write to process.stderr. Cannot be used to capture console.error/warn calls due to the custom console implementation of jest.
toLogErrorOrWarn Checks if a function logs an error or warning via console.error() or console.warn(), respectively.

Installation

$ npm install jest-to-log

Requirements

  • Latest versions of Jest recommended

Dependencies

  • 0 javascript/nodejs dependency!

Test

$ npm test