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

@contractshark/core-spec

v1.0.1

Published

Logic for SharkCI framework.

Downloads

6

Readme

Contract Shark Core Spec

@contractshark/core-spec

Writting tests

The core test functionality is provided by the @contractshark/core-spec module which is automatically attached to your project at initialization.

Initializing specs

The framework provides a Spec class which holds basically the whole testing power. You start your test by creating an instance of that class.

import { Spec } from '@contractshark/core-spec';

const spec = new Spec();

Testing features

The Spec instance provide methods that you can use when writting tests. Most of the time you will use the test method which performs the test you write.

spec.test('is true', async (ctx) => {
  // promise | function
  ctx.true(true);
});

There is also the skip method which prevents a test te be performed, and the only method which includes itself into the test process but excludes all other tests.

Nested specs

Tests can be nested using the spec method.

const colors = new Spec();
...
spec.spec('colors', colors);

Using callbacks

The framework provides before and after methods which are execute at the beginning and at the end of the spec case.

spec.before((stage) => {
  // execute before all tests
});
...
spec.after((stage) => {
  // execute after all tests
});

These methods have access to the stage of the spec instance. The stage is global to the whole spec stack which means that all settings are always preserved.

There are also the beforeEach and afterEach methods which are triggered before and after each test. These methods have access to the context and stage of the spec. The context represents a copy of a stage and is preserved between beforeEach, test and afterEach methods. This allows for testing atomic tests where the context is always reset for each test.

spec.beforeEach((context, stage) => {
  // execute before all tests
});
...
spec.afterEach((context, stage) => {
  // execute after all tests
});

Callback functions can be called multiple times and the execution will happen in a defined sequence.

Shared data

The context and the stage both provide a way to set and get values with proper TypeScript types.

interface Data {
  id: number;
  name: string;
}

const spec = new Spec<Data>();

spec.beforeEach((ctx) => {
  ctx.set('id', 100);
  ctx.set('name', 'Satoshi');
});

spec.test('is Satoshi with id=100', (ctx) => {
  const id = ctx.get('id');
  const name = ctx.get('name');
  ctx.is(id, 100);
  ctx.is(name, 'Satoshi');
});

Values set inside the before and after blocks are available to all spec methods. Values set in the beforeEach and afterEach blocks are available only on the context stack of each test.