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 🙏

© 2024 – Pkg Stats / Ryan Hefner

pietr

v0.1.0

Published

A simple, lightweight nodejs test runner

Downloads

5

Readme

pietr

pietr is a simple test runner for node.

To use it, just import it like you would any other module and define your tests with the imported test function. The resulting file would be a directly runnable test suite.

Installation

npm intsall --save-dev pietr

Why yet another test runner?

I created pietr because I wanted a runner that doesn't expose itself through global functions (i.e. no magical describe / its). Instead, the user imports pietr just like any other module. While there are other test runners that are modules themselves, they tend to bring a lot of dependencies along. That was the second major reason - I wanted a small, lightweight test runner, that does not outweight the code I'm about to test by two magnitudes.

Usage

  • test(testFn: Function): void
  • test(title: string, testFn: Function): void

If you don't provide an explicit title, or title is empty, pietr takes the name of testFn and uses it as title. It's considered an error, if the so derived title is falsy.

example.ts

You can use any assertion library you'd like. Throwing exceptions yourself is fine too.

import { test } from 'pietr'

// Using arrow functions and explicit `title`
test('Test via arrows', () => {
    assert(1 === 1, 'Math is broken :/');
});

// using function's name as title
test(function shouldBeAlwaysTrue() {
    assert(true, 'Logic is broken too :/');
});

function assert(condition: boolean, message: string) {
    if (!condition) {
        throw new Error(message);
    }
}

To run it: tsc example.ts && node example.js

example2.js

const assert = require('assert');
const { test } = require('pietr');

test('js example', () => {
    assert.equal(1, 1);
});

To run it: node example2.js

Debugging

Debugging is as simple as running the test file under node's built-in debugger. No special incantations required.

node --inspect-brk <path_to_test.js>

Using the runner

You can bulk-run your tests with the included pietr binary. It's usage is

./node_modules/.bin/pietr --pattern='<glob_to_tests>'

Also, as with most other runners, you can pre-include a script:

./node_modules/.bin/pietr --pattern='<glob_to_tests>' --require=source-map-support/register

Limitations

pietr does not support asynchronous functions, yet. I'm planning on adding async support via Promises, but don't hold your breath.