destoroyah
v0.2.7
Published
disastrous quickcheck-like testing framework - let the disaster happen during development, not after deployment
Downloads
7
Maintainers
Readme
##Disaster Driven Development disastrous quickcheck-like testing framework - let the disaster happen during development, not after deployment
[...]Destoroyah is also the only enemy that actually hurt Godzilla emotionally when he killed Godzilla Jr.
###What is this for?
As an example we will try to write a function that repeats a char n times
####BDD style, coding by example
describe 'char repeater', ->
it 'should return a string of given length', ->
generated = charRepeater('c', 100)
expect(generated.length).toBe(100)
will may raise the implementation
charRepeater = (char, length) -> (char for [1..length]).join ''
Test is green! Deploy!
let the disaster happen: charRepeater('a', 0)
... gives a
?! but the test said its ok!
forgot the not so obvious case:
it 'should return a zero length string when given length is 0', ->
generated = charRepeater('c', 0)
expect(generated.length).toBe(0)
... ####DDD style, no need to think of every possible argument write a disaster
awake 'Repeater', ->
rampage 'on the char repeater', (char, pInt_length) ->
generated = charRepeater(char, pInt_length)
return generated.length is 0 if char is null or char is ''
generated.length is pInt_length
now destoroyah will complain that the charRepeater
doesn't fulfill our hopes in each case
destoroyah will force you to the correct implementation
charRepeater = (char, length) ->
return '' if length == 0
(char for [1..length]).join ''
###Why you should care? Because whether you not me can think of all possibilities that can happen to your functions. Bad arguments like NULL, an empty string, empty array... in combination with good arguments. A quickcheck framework knows these edge cases and tests them. Even further it generates hundreds of test cases for you. The function will by tested with all possible cases - not just the ones we thought about.
###Disasters Write your disasters according to the introduction You may want to consider using coffee-script to keep your disasters as clean as possible.
#####Why those names? "awake", "rampage", "angryness", "attack", "hope"....
Because writing tests should be fun!
"A monster is going on a rampage on your functions by attacking it with arguments.
You can just sit there and hope that your function withstands these attacks."
No this is no joke, it is a fully working simple to use QuickCheck testing library.
#####I don't like these childish names! How do they translate to my beloved BDD?
- awake = describe
- rampage = it
- hope = expect
- disaster = specification
- monster = test suite
- attacks = generated arguments you use for your function
- angryness = maximum number of test cases
###Install
npm install -g destoroyah
###Can i win the Fields Medal? Yes you can BhargavaZil!
###Burn!
open the terminal and type destoroyah [--watch] [disasters]
e.g. destoroyah './disasters/*Zil.coffee'
to run each disaster in the 'disasters' folder.--watch
will run the disasters after each file change in the current directory
Usage: destoroyah [options] [files]
Options:
-h, --help output usage information
-V, --version output the version number
-w, --watch run disasters on file changes (changes on disaster files are always watched, even when -e or -d are set)
-e, --watchExtension <extensions> file extension to watch for changes - defaults to "js, coffee"
-d, --watchDirectory <paths> only watch files in this directories - defaults to the current working directory
###Karma to run with karma use karma-destoroyah