BDD + QDD testing framework for JavaScript
JavaScript CoffeeScript
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Macchiato.js - BDD + QDD testing framework for JavaScript -

Macchiato is testing framework for JavaScript, inspired by QuickCheck, a similar library for Haskell programs.

About QuickCheck

from QuickCheck module description

QuickCheck is a library for random testing of program properties.

The programmer provides a specification of the program, in the form of properties which functions should satisfy, and QuickCheck then tests that the properties hold in a large number of randomly generated cases.

Specifications are expressed in Haskell, using combinators defined in the QuickCheck library. QuickCheck provides combinators to define properties, observe the distribution of test data, and define test data generators.

Demo page


Sorry. now Macchiato.js is under development

please see GitHub Milestones

Sample code

Register test suites

Use macchiato.stock( labeled_properties )

macchiato.stock({ // stock test properties as object
    'number x, y => x + y === y + x' : // <label>:<callback>
          arbitrary( 'number', 'number' ).property( function( x, y ){
              return x + y === y + x; // boolean
}).taste(); // run all stocked test suites

in default, macchiato.js generate 100 pattern argument per test-property.

Run Test Suites

Use macchiato.taste()

macchiato.taste(); // check all stocked test quite. and display test result

How to see generator works

Use arbitrary.sample( opt_count )

arbitrary( 'boolean' ).sample( 5 ); // [ true, false, false, true, true ]
arbitrary( 'boolean' ).sample( 5 ); // [ false, false, true, false, true ]

// in default, return array has 10 elements
arbitrary( 'integer' ).sample(); // [ 0,1,1,0,-1,6,6,-12,-2,16 ]

Use adhoc new type generator

Use arbitrary( type_signature ).fmap( modifier_callback )

// Non Negative Integer generator
arbitrary('integer').fmap( function( n ){
  return Math.abs( n );
}).property( function( x ){
  return x > -1;

Register User generator

Use arbitrary( type_signature ).recipe( generator_callback )

arbitrary( 'hoge' ).recipe(
  combinrator.elements( ['hoge', 'huga', 'foo', 'bar'] )

Or, arbitrary( type_signature ).recipeAs( new_type_signature )

arbitrary( 'integer' ).fmap( function( n ){
  var x = Math.max( Math.abs( n ), 1 );
  return x % 15 == 0 ? 'FizzBuzz' : x % 5 == 0 ? 'Buzz' : x % 3 == 0 ? 'Fizz' : x;
}).recipeAs( 'fizzbuzz' );