diff options
Diffstat (limited to 'node_modules/ava/lib/validate-test.js')
-rw-r--r-- | node_modules/ava/lib/validate-test.js | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/node_modules/ava/lib/validate-test.js b/node_modules/ava/lib/validate-test.js new file mode 100644 index 000000000..8258a5990 --- /dev/null +++ b/node_modules/ava/lib/validate-test.js @@ -0,0 +1,48 @@ +'use strict'; + +function validate(title, fn, metadata) { + if (metadata.type !== 'test') { + if (metadata.exclusive) { + return '`only` is only for tests and cannot be used with hooks'; + } + + if (metadata.failing) { + return '`failing` is only for tests and cannot be used with hooks'; + } + + if (metadata.todo) { + return '`todo` is only for documentation of future tests and cannot be used with hooks'; + } + } + + if (metadata.todo) { + if (typeof fn === 'function') { + return '`todo` tests are not allowed to have an implementation. Use ' + + '`test.skip()` for tests with an implementation.'; + } + + if (typeof title !== 'string') { + return '`todo` tests require a title'; + } + + if (metadata.skipped || metadata.failing || metadata.exclusive) { + return '`todo` tests are just for documentation and cannot be used with `skip`, `only`, or `failing`'; + } + } else if (typeof fn !== 'function') { + return 'Expected an implementation. Use `test.todo()` for tests without an implementation.'; + } + + if (metadata.always) { + if (!(metadata.type === 'after' || metadata.type === 'afterEach')) { + return '`always` can only be used with `after` and `afterEach`'; + } + } + + if (metadata.skipped && metadata.exclusive) { + return '`only` tests cannot be skipped'; + } + + return null; +} + +module.exports = validate; |