diff options
| author | ST-DDT <[email protected]> | 2022-04-04 16:47:03 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2022-04-04 14:47:03 +0000 |
| commit | 8b545b4e72e0d00f93d51f8de876103bedebff03 (patch) | |
| tree | a9488736462c05ca887f9f2432cf7c69396b6c80 | |
| parent | 9e03bcff3aaad13afbfae99fb1df046c2f227c2c (diff) | |
| download | faker-8b545b4e72e0d00f93d51f8de876103bedebff03.tar.xz faker-8b545b4e72e0d00f93d51f8de876103bedebff03.zip | |
chore: fix mustache type warning and add some tests (#753)
| -rw-r--r-- | src/helpers.ts | 17 | ||||
| -rw-r--r-- | test/helpers.spec.ts | 49 |
2 files changed, 51 insertions, 15 deletions
diff --git a/src/helpers.ts b/src/helpers.ts index 051de5ea..f302ac46 100644 --- a/src/helpers.ts +++ b/src/helpers.ts @@ -477,22 +477,19 @@ export class Helpers { */ mustache( str: string | undefined, - data: Record< - string, - string | ((substring: string, ...args: any[]) => string) - > + data: Record<string, string | Parameters<string['replace']>[1]> ): string { if (str == null) { return ''; } for (const p in data) { const re = new RegExp('{{' + p + '}}', 'g'); - str = str.replace( - re, - // TODO @Shinigami92 2022-01-14: Try to improve the type or maybe use `if` - // @ts-expect-error - data[p] - ); + const value = data[p]; + if (typeof value === 'string') { + str = str.replace(re, value); + } else { + str = str.replace(re, value); + } } return str; } diff --git a/test/helpers.spec.ts b/test/helpers.spec.ts index 0be83f98..cf817ae5 100644 --- a/test/helpers.spec.ts +++ b/test/helpers.spec.ts @@ -724,11 +724,50 @@ describe('helpers', () => { }); describe('mustache()', () => { - it('returns empty string with no arguments', () => { - expect( - // @ts-expect-error - faker.helpers.mustache() - ).toBe(''); + it('returns empty string with no template input', () => { + expect(faker.helpers.mustache(undefined, {})).toBe(''); + }); + + it('returns empty string with empty template input', () => { + expect(faker.helpers.mustache('', {})).toBe(''); + }); + + it('supports string replace values', () => { + const actual = faker.helpers.mustache('1{{value}}3', { value: '2' }); + + expect(actual).toBe('123'); + }); + + it('supports function replace values faker values', () => { + const actual = faker.helpers.mustache('1{{value}}3', { + value: faker.datatype.string(2), + }); + + expect(actual).toHaveLength(4); + }); + + it('supports function replace values faker function', () => { + const actual = faker.helpers.mustache('1{{value}}3', { + value: () => faker.datatype.string(3), + }); + + expect(actual).toHaveLength(5); + }); + + it('supports function replace values no args', () => { + const actual = faker.helpers.mustache('1{{value}}3', { + value: () => '7', + }); + + expect(actual).toBe('173'); + }); + + it('supports function replace values with args', () => { + const actual = faker.helpers.mustache('1{{value}}3', { + value: (key) => String(key.length), + }); + + expect(actual).toBe('193'); }); }); |
