Skip to content

Commit

Permalink
Merge pull request #193 from iambumblehead/strict-fail-no-defs
Browse files Browse the repository at this point in the history
Strict fail no defs
  • Loading branch information
koshic authored Mar 23, 2023
2 parents 3e31d74 + 06ba29b commit 5fc30c3
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 5 deletions.
6 changes: 5 additions & 1 deletion src/esmockErr.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,12 @@ const errMissingLoader = () =>
new Error('the loader chain process must include esmock. '
+ 'start the process using --loader=esmock.')

const errModuleIdNoDefs = (moduleId, parent) =>
new Error(`no mocks provided for module: "${moduleId}" (used by ${parent}`)

export default {
errModuleIdNotFound,
errModuleIdNotMocked,
errMissingLoader
errMissingLoader,
errModuleIdNoDefs
}
14 changes: 10 additions & 4 deletions src/esmockModule.js
Original file line number Diff line number Diff line change
Expand Up @@ -129,12 +129,18 @@ const esmockModule = async (moduleId, parent, defs, gdefs, opt) => {
if (!moduleFileURL)
throw esmockErr.errModuleIdNotFound(moduleId, parent)

const gkeys = gdefs ? Object.keys(gdefs) : []
const dkeys = defs ? Object.keys(defs) : []
if (opt.strict === 3 && !gkeys.length && !dkeys.length) {
throw esmockErr.errModuleIdNoDefs(moduleId, parent)
}

const treeid = typeof opt.id === 'number' ? opt.id : nextId()
const treeidspec = `${moduleFileURL}?key=${treeid}&strict=${opt.strict}?` + [
'esmkgdefs=' + (gdefs && (await esmockModuleId(
parent, treeid, gdefs, Object.keys(gdefs), opt)).join('#-#') || 0),
'esmkdefs=', (defs && (await esmockModuleId(
parent, treeid, defs, Object.keys(defs), opt)).join('#-#') || 0)
'esmkgdefs=' + (gkeys.length && (await esmockModuleId(
parent, treeid, gdefs, gkeys, opt)).join('#-#') || 0),
'esmkdefs=', (dkeys.length && (await esmockModuleId(
parent, treeid, defs, dkeys, opt)).join('#-#') || 0)
].join('#-#')

esmockTreeIdSet(String(treeid), treeidspec)
Expand Down
12 changes: 12 additions & 0 deletions tests/tests-node/esmock.node.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,18 @@ test('should throw error when strict mock definition not found', async () => {
assert.deepEqual(pathWrapPartial.basename('/dog.png'), 'dog.png')
})

test('should error when "strictest" called with defs: {}', async () => {
await assert.rejects(async () => esmock.strictest(
'../local/importsCoreLocalAndPackage.js', {}
))
})

test('should error when "strictest" called with defs: undefined', async () => {
await assert.rejects(async () => esmock.strictest(
'../local/importsCoreLocalAndPackage.js'
))
})

test('should error when "strictest" mock tree module not mocked', async () => {
const strictestTree = await esmock.strictest(
'../local/importsCoreLocalAndPackage.js', {
Expand Down

0 comments on commit 5fc30c3

Please sign in to comment.