testdouble
Version:
A minimal test double library for TDD with JavaScript
41 lines (35 loc) • 1.31 kB
JavaScript
import _ from './wrap/lodash'
import log from './log'
import stringifyAnything from './stringify/anything'
const DEFAULTS = {
ignoreWarnings: false,
promiseConstructor: Promise,
suppressErrors: false
}
const DELETED_OPTIONS = ['extendWhenReplacingConstructors']
let configData = _.extend({}, DEFAULTS)
export default _.tap((overrides) => {
deleteDeletedOptions(overrides)
ensureOverridesExist(overrides)
return _.extend(configData, overrides)
}, (config) => {
config.reset = () => {
configData = _.extend({}, DEFAULTS)
}
})
const deleteDeletedOptions = (overrides) => {
_.each(overrides, (val, key) => {
if (_.includes(DELETED_OPTIONS, key)) {
log.warn('td.config', `"${key}" is no longer a valid configuration key. Remove it from your calls to td.config() or it may throw an error in the future. For more information, try hunting around our GitHub repo for it:\n\n https://github.com/testdouble/testdouble.js/search?q=${key}`)
delete overrides[key]
}
})
}
const ensureOverridesExist = (overrides) => {
_.each(overrides, (val, key) => {
if (!Object.prototype.hasOwnProperty.call(configData, key)) {
log.error('td.config',
`"${key}" is not a valid configuration key (valid keys are: ${stringifyAnything(_.keys(configData))})`)
}
})
}