argsy
awesome argument assertion
Made with ❤ at @outlandish
Argument-oriented assertions...
- assertions that name offending arguments
- collects assertion failures and groups them in a single error
- reports function name, location, and clean stack trace
- support for optional arguments
Example
Before
function hello (name, message) {
if (typeof name !== 'string' || !name.length) {
throw new Error('expecting name to be non-empty string')
} else if (message && typeof message !== 'string') {
throw new Error('expecting message to be string')
}
console.log('hello', name, message)
}
hello()
After
function hello (name, message) {
assert('hello')
.nonEmptyStr(name)
.optional.str(message)
console.log('hello', name, message)
}
hello()
Install
npm install --save argsy
yarn add argsy
Import
import assert from 'argsy'
var assert = require('argsy')
API
assert.{method}(val[, subject][, name[, name2]])
Assert val
is of type indicated by method
(see below).
- val {*} value to assert
- subject {*} (optional) subject of assert
- name {String} name to report in error message
- nam2 {String} (optional) name of subject
No return value.
AssertionInstance
assert([name]) : AssertionInstance
Create a new assertion instance.
- name {String} (optional) name of the assertion instance
Returns an AssertionInstance
.
AssertionInstance.{method}(val[, subject][, name[, name2]])
Assert val
is of type indicated by method
(see below).
- val {*} value to assert
- subject {*} (optional) subject of assert
- name {String} name to report in error message
- nam2 {String} (optional) name of subject
Returns the AssertionInstance
.
Methods
ok
notOk
str
obj
nonEmptyStr
num
sym
int
bool
undef
null
nan
elem (use subject arg)
key (use subject arg)
AssertionInstance.optional.{method}()
Assert an optional value.
Shares the same API as AssertionInstance.method
(see above).
Returns the AssertionInstance
.
AssertionInstance.$eval()
Assert the arguments.
This should be called last in the chain of assertion declarations.
More Examples
examples/report.js
Evaluates all assertions, groups them, and reports all failures.
Note call to $eval
at the end.
function add (a, b) {
assert('add')
.num(a, 'a')
.num(b, 'b')
.$eval()
return a + b
}
const a = Number(process.argv[1])
const b = Number(process.argv[2])
const result = add(a, b)
console.log(a, '+', b, '=', result)
Good
$ node examples/add.js 1 2
1+2=3
Bad
$ node add.js
Error: Failed argument assertions in call to "add" at C:/argsy/examples/report.js:10:
- expecting a to be number
- expecting b to be number
at Function.evaluate (C:/argsy/src/index.js:63:13)
at add (C:/argsy/examples/report.js:10:6)
at Object.<anonymous> (C:/argsy/examples/report.js:18:16)
examples/spongebob.js
Stops and throws at first failed assertion.
import assert from 'argsy'
function person (name, occupation) {
assert
.nonEmptyStr(name, 'name')
.optional.nonEmptyStr(occupation, 'occupation')
console.log(name + ' is a ' + (occupation || 'sponge'))
}
person('Spongebob')
person(['Spongebob'], 'crabby patty flipper')
person('Spongebob', 'crabby patty flipper')
Contributing
All pull requests and issues welcome!
If you're not sure how, check out the great video tutorials on egghead.io!
License
MIT © Sam Gluck