diff --git a/src/lib/util/assertString.js b/src/lib/util/assertString.js index 3baa4452f..e62e1a624 100644 --- a/src/lib/util/assertString.js +++ b/src/lib/util/assertString.js @@ -1,4 +1,4 @@ export default function assertString(input) { if (input === undefined || input === null) throw new TypeError(`Expected a string but received a ${input}`); - if (input.constructor.name !== 'String') throw new TypeError(`Expected a string but received a ${input.constructor.name}`); + if (typeof input !== 'string' && !(input instanceof String)) throw new TypeError(`Expected a string but received a ${input?.constructor?.name ?? typeof input}`) } diff --git a/test/util.test.js b/test/util.test.js index 0146a4e2c..5edbf0441 100644 --- a/test/util.test.js +++ b/test/util.test.js @@ -54,11 +54,23 @@ describe('assertString', () => { assert.throws(() => { assertString([]); }, TypeError); }); + it('Should throw an error if argument provided is an Object pretending to be a \'string\'', () => { + assert.throws(() => { assertString({constructor: {name: "string"}}); }, TypeError); + }); + + it('Should throw an error if argument provided is an Object pretending to be a \'String\'', () => { + assert.throws(() => { assertString({constructor: {name: "String"}}); }, TypeError); + }); + it('Should not throw an error if the argument is an empty string', () => { assert.doesNotThrow(() => { assertString(''); }); }); - + it('Should not throw an error if the argument is a String', () => { assert.doesNotThrow(() => { assertString('antidisestablishmentarianism'); }); }); + + it('Should not throw an error if the argument is a boxed string', () => { + assert.doesNotThrow(() => { assertString(new String('antidisestablishmentarianism')); }); + }); });