4.0.3 • Published 5 years ago

cotest v4.0.3

Weekly downloads
13
License
MIT
Repository
github
Last release
5 years ago

cotest

yet another unit test assertion and test runner - small, simple, no dependencies

ScreenCap

WhyWhatHowLicense

Why

This originated as an attempt to have assertions that are less verbose because assert.notDeepStrictEqual is ugly.

What

Example

const ct = require('cotest')

ct('1. primitives - comparison', function(t) {
  t('==', 2, 2)
  t('!==', 3, 4, 'should be unequal')
  t('<', 1, 2)
  t('!', null, 'should be falsy')
  t.skip('>=', 55, 0, 'TODO')
})
ct('2. object - comparison', function(t) {
  t('!{===}', [], 'str', 'should be notDeepStrictEqual')
  t('{==}', [2], 2, 'should be deepEqual')
})
ct('3. async', function(t, end) {
  setTimeout(end, 0)
  t('!==', 3, 4)
  t('!{==}', 3, 4)
})
ct.skip('4. skip', function(t) {
  // all tests defined here will be skipped
})

Features

  • Javascript Comparison Operators (==, !==, ===, !===, <, <=, >, >=)
  • Negation (!, !!)
  • Other symbols for nested object
    • {==}: deepEqual
    • !{==}: notDeepEqual
    • {===}: strictDeepEqual
    • !{===}: notStrictDeepEqual
  • throws for assert.throws, !throws for doesNotThrows
  • Async support
  • Skip full test groups or individual assertions with t.skip()
  • Only run selected test group(s) with t.only()
  • Basic test runner to run multiple files and directories
  • Compact reporting
  • Support only running selected tests for troubleshooting

Limitations

  • No nesting of tests
  • Limited configuration

How

Installation

In node, from the project root folder type npm i -D cotest to install.

API

Command Line

  • cotest file1 directory1 directory2 file2 ...

Test Declaration

  • cotest(titleString[, testFunction [, message]])
  • cotest.skip(titleString[, testFunction [, message]])
  • cotest.only(titleString, testFunction [, message])

if no test function is provided, the test will be marked as skipped

Assertion Declaration

  • assert(operator, valueToTest, referenceValue[, additional message])
  • assert.skip(operator, valueToTest, referenceValue[, additional message])

Async use

Test are normally automatically completed after the test function is executed. Example: cotest('syncTest', function(assert) { /*assertions*/ })

To change this behaviour, add a callback to the test function. This calback must be called to end the test. Example: cotest('asyncTest', function(assert, done) { /*assertions*/; done()})

An error message can be passed to the donefunction. Example: cotest('asyncTest', function(assert, done) { if (true) done() else done('failed') })

If a callback is declared but not called, the test fails after 1000ms. To change the default duration: cotest.timeout = 1500

Use in a test file

	var co = require('cotest')
	co('async test, call the function argument to end', function(t, done) {
		t('<', Math.abs(error), 0.001)
		setTimeout(done, 0)
	})
	co('sync test - no function argument needed', function(t) {
		t('==', 1+1, 2)
		t('!', null)
		t('{==}', [1, 2], [1, 2])
	}, 'Any Truthy Value as 3rd argument will only run flagges tests')
	co('sync test - no function argument needed', function(t) {
		t('==', 1+1, 2)
		t('{==}', [1, 2], [1, 2])
	})

Use in package.json

"scripts": {
  "test": "cotest mytestdirectory",
  "test_file": "cotest mytestdirectory/mytestfile"
}

In any of the test files are flagged as priority, only these tests will run.

License

MIT © Hugo Villeneuve

4.0.3

5 years ago

4.0.2

5 years ago

4.0.1

6 years ago

4.0.0

6 years ago

3.0.0

7 years ago

2.1.1

7 years ago

2.1.0

7 years ago

2.0.2

7 years ago

2.0.1

7 years ago

2.0.0

7 years ago

1.6.1

8 years ago

1.5.1

8 years ago

1.5.0

8 years ago

1.4.0

8 years ago

1.3.2

8 years ago

1.3.1

8 years ago

1.3.0

8 years ago

1.2.0

8 years ago

1.1.1

8 years ago

1.0.1

8 years ago

1.0.0

8 years ago

0.1.0

8 years ago