Skip to content

Latest commit

 

History

History
269 lines (210 loc) · 5.2 KB

readme.md

File metadata and controls

269 lines (210 loc) · 5.2 KB

Assertion Library for Browsers and NodeJS

Build Status NPM version Bower version

Based on the API Interface of the NodeJS Assert module. And is part of the uTest Library.

As a standalone module can be found in NPM repository

npm install assertion
API
NodeJS API
  • Assert Documentation

     assert
     
     	equal
     	notEqual
     	deepEqual
     	notDeepEqual
     	strictEqual
     	notStrictEqual
     	throws
     	doesNotThrow
         ifError
Additional API
  • has / hasNot

    Subset matching

     // Substring search
     assert.has(String, String | RegExp, ?message);
     
     // Simple property existence check
     assert.has(Object, String);
     
     // Sub-object match
     assert.has(Object, Object);
     
     // Check if item exists in set
     assert.has(Array, Primitive);
     
     // Subset match
     assert.has(Array, Array);

    When checking arrays or objects, deep matching is performed. See tests

     
     assert.has({
     	foo: 'foo',
     	bar: {
     		qux: {
     			qux: 'qux'
     			quux: 'quux'
     		},
     		baz: [1, 2, 3]
     	}
     }, {
     	foo: null,
     	bar: {
     		baz: [1],
     		qux: {
     			qux: 'qux'
     		}
     	}
     });
     
  • is/isNot

    Type check

     	// Check by Typename
     	assert.is(Any, String, ?message)
     	
     	// Check by Contructor (instanceof)
     	assert.is(Any, Function);

    Typename is extracted from Object.prototype.toString.call, so these are:

     	'String'
     	'Number'
     	'Null'
     	'Undefined'
     	'Function'
     	'RegExp'
     	'Date'
     	'Object' // any `object` will pass here
     	'HTML**' // DOM Node, e.g. HTMLBodyElement
     	'CustomEvent'
     	...
     	all other built-in types
  • lessThan lessThanOrEqaul greaterThan greaterThanOrEqual

    Compares two digits

  • Aliases

    There are also aliases (which can be set to globals, to simplify the write-read of tests)

     assert.eq_      === assert.equal
     assert.notEq_   === assert.notEqual
     
     assert.lt_      === assert.lessThan
     assert.lte_     === assert.lessThanOrEqaul
     assert.gt_      === assert.greaterThan
     assert.gt_      === assert.greaterThanOrEqual
     
     assert.deepEq_  === assert.deepEqual
     assert.notDeepEq_  === assert.notDeepEqual
  • jQuery

    jQuery Assertion Extensions (alias name syntax)

     	$.fn.eq_
     	$.fn.notEq_
     	$.fn.deepEq_
     	$.fn.notDeepEq_
     	$.fn.has_
     	$.fn.hasNot_
     	$.fn.lt_
     	$.fn.lte_
     	$.fn.gt_
     	$.fn.gte_

    Functions API:

    • Get Property
      • (Key, Expected)
      • ([Key, Expected], message)
    • Function call
      • (FnName [, ...arguments], Expected)
      • ([FnName [, ...arguments], Expected], message)

    has/hasNot

    • Node Find/Filter Assertions
      • (Selector, ?ExpectedCount)

    Example:

     // <div class='container' id='foo'>
     //		<h4>Baz</h4>
     //		<span>Qux</span>
     // </div>
     
     $('.container')
     	.eq_('length', 1)
     	.eq_('attr', 'id', 'foo')
     	.eq_('hasClass', 'container', true)
     	
     	.children()
     	.eq_('length', 2)
     	.has_('html', 'span')
     	
     	.filter('h4')
     	.eq_('length', 1)
     	.eq_('text', 'Baz')
     	
     	// addition sample
     	.is_('visible'),
     	.is_('hidden')
     	.eq_('css', 'border-left-width', '2px')
     	;
     	
     $('.container')
     	.has_('h4')
     	.hasNot_('h1')
     	;
  • Assert callbacks calls

    • await

      Wait for a callback

      Creates a wrapper function to ensure that the function is called.

       	// ! Arguments order does not matter
       	var fn = assert.await(
       		String   /* optional - name of this wrapper*/
       		Function /* optional - wrap the function*/,
       		Object   /* optional - use binded context*/,
       		Number   /* optional - expectation count, default is `1`*/
       	);
       	
       	// creates item in assert.callbacks
       	[
       		{
       			name: String,
       			error: Error, // to receive the stack trace
       			count: Number
       		}
       	];
       	
       	// after the `fn` function is called `count` times, then the object is removed
       	// from the callbacks set
       	
       	
       	// Example
       	var fn = assert.await();
       	assert.callbacks.length === 1;
       	try {
       		throw new Error()
       	} catch {
       		fn();
       	}
       	
       	assert.callbacks.length === 0;
       	
    • avoid

      Unexpect more then N function calls

       // ! Arguments order does not matter
       var fn = assert.avoid(
       	String   /* optional - name of this wrapper*/
       	Function /* optional - wrap the function*/,
       	Object   /* optional - use binded context*/,
       	Number   /* optional - amount of allowed calls, default is `0`*/
       );
       
       fooDfr()
       	.fail(assert.avoid())
       	.done(function(){
       		// ..
       	})
       	
       
  • Listener

    You can attach listener to the assertions. Event Types:

    • start
    • fail

      if fail type listener is attached, then exceptions are not thrown.

    • success
     // sample
     assert.on('fail', function(error){
     	error instanceof assert.AssertionError;
     });

©️ MIT - The Atma.js Project