Coder Social home page Coder Social logo

xpepermint / hayspec-framework Goto Github PK

View Code? Open in Web Editor NEW

This project forked from hayspec/framework

0.0 2.0 0.0 730 KB

Lightweight, open source and magic-free framework for testing JavaScript and NodeJS applications.

Home Page: https://hayspec.github.io/framework

License: MIT License

JavaScript 0.07% TypeScript 99.93%

hayspec-framework's Introduction

Hayspec Framework

Build Statusย codecov

Hayspec is a lightweight, open source, magic-free framework for testing JavaScript and NodeJS applications. It's written in TypeScript and it's actively maintained. The source code is available on GitHub where you can also find our issue tracker.

Installation of Hayspec

Start by installing the hayspec command-line tool.

$ npm install -g @hayspec/cli

This package uses promises thus you need to use Promise polyfill when promises are not supported.

Getting started

Hayspec automates the testing process of your JavaScript or TypeScript code. It doesn't require you to install certain applications in order to get started.

The Hayspec interface is designed to fully support the power of TypeScript. It is magic-free which means you have a complete control and visibility of what the code does and how tests are executed. The code should look familiar to any JavaScript or TypeScript developer.

Project initialization

Start by creating a new project folder.

$ mkdir myProject
$ cd myProject

Initialize the project and install the dependencies.

$ hayspec init
$ npm install

Run tests to verify everything works as expected.

$ npm test

Writting tests

The core test functionality is provided by the @hayspec/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 '@hayspec/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', 'John');
})

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

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.

Using CLI

The @hayspec/cli module is automatically installed when you initialize the project. You can interact with the utility using the npx hayspec command in your terminal.

To get a list of available features use the --help flag.

$ npx hayspec --help

Running tests

Every test file must export the spec instance for the CLI to be able to detect the test.

export default spec;

Run the hayspec test command to run tests. Customize the files search by using the --match flag.

$ npx hayspec test --match ./**/*.test.*

TypeScript support

Install the ts-node NPM package then use the --require flag to enable TypeScript support.

hayspec --require ts-node/register

Project configuration

Hayspec configuration options can be saved inside the package.json file under the the hayspec key.

{
  "hayspec": {
    "require": [
      "ts-node/register"
    ],
    "match": [
      "./src/**/*.test.*"
    ]
  }
}

Note that these options can be overriden by providing CLI arguments.

Hayspec packages

Package Description Version
@hayspec/cli Command-line interface. NPM Version
@hayspec/init Project initializer. NPM Version
@hayspec/reporter Default command-line reporter. NPM Version
@hayspec/runner Helper for loading and performing test files. NPM Version
@hayspec/spec Main framework features for writing tests. NPM Version

Contributing

See CONTRIBUTING.md for how to help out.

Licence

See LICENSE for details.

hayspec-framework's People

Contributors

xpepermint avatar davision avatar momannn avatar sfurman89 avatar anzemur avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.