From 5f35592b3737939d4e269b6a823876f35567440b Mon Sep 17 00:00:00 2001 From: Shinigami92 Date: Wed, 20 Apr 2022 16:34:09 +0200 Subject: [PATCH 1/9] fix: access initial seed --- src/faker.ts | 4 +++- test/faker.spec.ts | 11 +++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/faker.ts b/src/faker.ts index 278e0219485..2a7dd0f5800 100644 --- a/src/faker.ts +++ b/src/faker.ts @@ -49,7 +49,7 @@ export class Faker { readonly definitions: LocaleDefinition = this.initDefinitions(); - seedValue?: number | number[]; + seedValue: number | number[]; readonly fake: Fake['fake'] = new Fake(this).fake; readonly unique: Unique['unique'] = new Unique().unique; @@ -97,6 +97,8 @@ export class Faker { this.locales = opts.locales; this.locale = opts.locale || 'en'; this.localeFallback = opts.localeFallback || 'en'; + + this.seed(Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER)); } /** diff --git a/test/faker.spec.ts b/test/faker.spec.ts index 7417121026e..a1a3e70f5b9 100644 --- a/test/faker.spec.ts +++ b/test/faker.spec.ts @@ -8,6 +8,17 @@ describe('faker', () => { faker.locale = 'en'; }); + it('should be possible to access the initial seed', () => { + const myFaker = new Faker({ + locale: 'en', + localeFallback: 'en', + locales: { en: { title: 'MyStuff' } }, + }); + + expect(myFaker.seedValue).toBeDefined(); + expect(myFaker.seedValue).toBeTypeOf('number'); + }); + it('should throw error if no options passed', () => { expect( () => From b665f3fc61dd3dd9efaab06591cc9226e865a507 Mon Sep 17 00:00:00 2001 From: Shinigami92 Date: Wed, 20 Apr 2022 17:07:28 +0200 Subject: [PATCH 2/9] chore: no need anymore for setting seed manually --- test/address.spec.ts | 3 --- test/animal.spec.ts | 3 --- test/commerce.spec.ts | 3 --- test/company.spec.ts | 3 --- test/database.spec.ts | 3 --- test/datatype.spec.ts | 3 --- test/date.spec.ts | 3 --- test/finance.spec.ts | 3 --- test/finance_iban.spec.ts | 3 --- test/git.spec.ts | 3 --- test/hacker.spec.ts | 3 --- test/helpers.spec.ts | 3 --- test/internet.spec.ts | 3 --- test/lorem.spec.ts | 3 --- test/music.spec.ts | 3 --- test/name.spec.ts | 3 --- test/phone.spec.ts | 3 --- test/system.spec.ts | 3 --- test/time.spec.ts | 3 --- test/unique.spec.ts | 3 --- test/vehicle.spec.ts | 3 --- test/word.spec.ts | 3 --- 22 files changed, 66 deletions(-) diff --git a/test/address.spec.ts b/test/address.spec.ts index 1569ec85640..f42afae14ae 100644 --- a/test/address.spec.ts +++ b/test/address.spec.ts @@ -283,9 +283,6 @@ describe('address', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/animal.spec.ts b/test/animal.spec.ts index b98aae5004b..5f081178912 100644 --- a/test/animal.spec.ts +++ b/test/animal.spec.ts @@ -98,9 +98,6 @@ describe('animal', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/commerce.spec.ts b/test/commerce.spec.ts index bb3a2271bf9..d28f4ebe0c8 100644 --- a/test/commerce.spec.ts +++ b/test/commerce.spec.ts @@ -77,9 +77,6 @@ describe('commerce', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/company.spec.ts b/test/company.spec.ts index cb37175181b..e66cb4c7cd6 100644 --- a/test/company.spec.ts +++ b/test/company.spec.ts @@ -86,9 +86,6 @@ describe('company', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/database.spec.ts b/test/database.spec.ts index 053f91d9f9f..dda919297b5 100644 --- a/test/database.spec.ts +++ b/test/database.spec.ts @@ -62,9 +62,6 @@ describe('database', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/datatype.spec.ts b/test/datatype.spec.ts index d6034dc7d34..45faf5b96ed 100644 --- a/test/datatype.spec.ts +++ b/test/datatype.spec.ts @@ -421,9 +421,6 @@ describe('datatype', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/date.spec.ts b/test/date.spec.ts index 99141a89476..6fddb631fb2 100644 --- a/test/date.spec.ts +++ b/test/date.spec.ts @@ -364,9 +364,6 @@ describe('date', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/finance.spec.ts b/test/finance.spec.ts index df5a193538f..e087203d1a6 100644 --- a/test/finance.spec.ts +++ b/test/finance.spec.ts @@ -121,9 +121,6 @@ describe('finance', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/finance_iban.spec.ts b/test/finance_iban.spec.ts index 8f72b2ddf5e..4d47e4bef01 100644 --- a/test/finance_iban.spec.ts +++ b/test/finance_iban.spec.ts @@ -6,9 +6,6 @@ import ibanLib from '../src/utils/iban'; const NON_SEEDED_BASED_RUN = 25; describe('finance_iban', () => { - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe('generic IBAN country checks', () => { it.each(ibanLib.formats.map((entry) => entry.country))('%s', (country) => { expect(country).toMatch(/^[A-Z]{2}$/); diff --git a/test/git.spec.ts b/test/git.spec.ts index 18451abd440..93ea42fff1e 100644 --- a/test/git.spec.ts +++ b/test/git.spec.ts @@ -98,9 +98,6 @@ describe('git', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/hacker.spec.ts b/test/hacker.spec.ts index 89f9d0a6bae..50aa42bea84 100644 --- a/test/hacker.spec.ts +++ b/test/hacker.spec.ts @@ -105,9 +105,6 @@ describe('name', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/helpers.spec.ts b/test/helpers.spec.ts index 3f63a80728c..d50c29e4f89 100644 --- a/test/helpers.spec.ts +++ b/test/helpers.spec.ts @@ -490,9 +490,6 @@ describe('helpers', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/internet.spec.ts b/test/internet.spec.ts index 1f870b27e6c..0de992b9756 100644 --- a/test/internet.spec.ts +++ b/test/internet.spec.ts @@ -123,9 +123,6 @@ describe('internet', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/lorem.spec.ts b/test/lorem.spec.ts index 10451632c31..8b6c88e70d1 100644 --- a/test/lorem.spec.ts +++ b/test/lorem.spec.ts @@ -118,9 +118,6 @@ describe('lorem', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/music.spec.ts b/test/music.spec.ts index 73457e8dbcd..bb52f4a2cd1 100644 --- a/test/music.spec.ts +++ b/test/music.spec.ts @@ -51,9 +51,6 @@ describe('music', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/name.spec.ts b/test/name.spec.ts index 91913c55537..fe463c4dfc7 100644 --- a/test/name.spec.ts +++ b/test/name.spec.ts @@ -163,9 +163,6 @@ describe('name', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/phone.spec.ts b/test/phone.spec.ts index 276272f7e4b..47dec0144c1 100644 --- a/test/phone.spec.ts +++ b/test/phone.spec.ts @@ -99,9 +99,6 @@ describe('phone', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/system.spec.ts b/test/system.spec.ts index 492e621d7df..9c606fe8b83 100644 --- a/test/system.spec.ts +++ b/test/system.spec.ts @@ -83,9 +83,6 @@ describe('system', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/time.spec.ts b/test/time.spec.ts index 82c3fbae3af..8dfd6d64a3d 100644 --- a/test/time.spec.ts +++ b/test/time.spec.ts @@ -47,9 +47,6 @@ describe('time', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/unique.spec.ts b/test/unique.spec.ts index 071231663b8..b1b9e121e7e 100644 --- a/test/unique.spec.ts +++ b/test/unique.spec.ts @@ -80,9 +80,6 @@ describe('unique', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/vehicle.spec.ts b/test/vehicle.spec.ts index 79731354c10..c0d7bb50922 100644 --- a/test/vehicle.spec.ts +++ b/test/vehicle.spec.ts @@ -78,9 +78,6 @@ describe('vehicle', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { diff --git a/test/word.spec.ts b/test/word.spec.ts index d236f564a0c..9dee16e9cd1 100644 --- a/test/word.spec.ts +++ b/test/word.spec.ts @@ -177,9 +177,6 @@ describe('word', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( faker.seedValue )}`, () => { From b715e162cd6f1fb9244bb2d1fe621868e5c8c294 Mon Sep 17 00:00:00 2001 From: Shinigami92 Date: Wed, 20 Apr 2022 17:26:26 +0200 Subject: [PATCH 3/9] chore: make seedValue readonly --- src/faker.ts | 35 +++++++++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/src/faker.ts b/src/faker.ts index 2a7dd0f5800..7edc8e72769 100644 --- a/src/faker.ts +++ b/src/faker.ts @@ -49,7 +49,7 @@ export class Faker { readonly definitions: LocaleDefinition = this.initDefinitions(); - seedValue: number | number[]; + private _initialSeed: number | number[]; readonly fake: Fake['fake'] = new Fake(this).fake; readonly unique: Unique['unique'] = new Unique().unique; @@ -98,7 +98,27 @@ export class Faker { this.locale = opts.locale || 'en'; this.localeFallback = opts.localeFallback || 'en'; - this.seed(Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER)); + this.seed(); + } + + /** + * The initial seed. + * + * Use the `seed` function to set a new seed. + */ + public get initialSeed(): number | number[] { + return this._initialSeed; + } + + /** + * The initial seed. + * + * Use the `seed` function to set a new seed. + * + * @deprecated Use `initialSeed` instead. + */ + public get seedValue(): number | number[] { + return this.initialSeed; } /** @@ -151,8 +171,15 @@ export class Faker { }); } - seed(seed?: number | number[]): void { - this.seedValue = seed; + /** + * Setting the seed again resets the sequence. + * + * @param seed The initial seed to use. + */ + seed( + seed: number | number[] = Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER) + ): void { + this._initialSeed = seed; if (Array.isArray(seed) && seed.length) { this.mersenne.seed_array(seed); } else if (!Array.isArray(seed) && !isNaN(seed)) { From 15e795087e20e1900750028f563aeb1aed3b456d Mon Sep 17 00:00:00 2001 From: Shinigami92 Date: Wed, 20 Apr 2022 17:27:01 +0200 Subject: [PATCH 4/9] test: check that sequence resets --- test/faker.spec.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/test/faker.spec.ts b/test/faker.spec.ts index a1a3e70f5b9..05592e11863 100644 --- a/test/faker.spec.ts +++ b/test/faker.spec.ts @@ -98,6 +98,29 @@ describe('faker', () => { // This is only here for coverage // The actual test is in mersenne.spec.ts describe('seed()', () => { + it('seed()', () => { + faker.seed(); + + expect(faker.initialSeed).toBeDefined(); + expect(faker.initialSeed).toBeTypeOf('number'); + }); + + it('should reset the sequence when calling `seed`', () => { + faker.seed(); + + const seed = faker.initialSeed; + + const num1 = faker.datatype.number(); + + faker.seed(seed); + const num2 = faker.datatype.number(); + + expect(num1).toBe(num2); + + const num3 = faker.datatype.number(); + expect(num1).not.toBe(num3); + }); + it('seed(number)', () => { faker.seed(1); From c6a0ed1cf59d6fe8eedd295eaacce4f3dfadbab3 Mon Sep 17 00:00:00 2001 From: Shinigami92 Date: Wed, 20 Apr 2022 17:33:53 +0200 Subject: [PATCH 5/9] chore: log deprecation warning --- src/faker.ts | 7 +++++++ test/faker.spec.ts | 15 +++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/faker.ts b/src/faker.ts index 7edc8e72769..73961428187 100644 --- a/src/faker.ts +++ b/src/faker.ts @@ -14,6 +14,7 @@ import { Git } from './git'; import { Hacker } from './hacker'; import { Helpers } from './helpers'; import { Image } from './image'; +import { deprecated } from './internal/deprecated'; import { Internet } from './internet'; import type { KnownLocale } from './locales'; import { Lorem } from './lorem'; @@ -118,6 +119,12 @@ export class Faker { * @deprecated Use `initialSeed` instead. */ public get seedValue(): number | number[] { + deprecated({ + deprecated: 'faker.seedValue', + proposed: 'faker.initialSeed', + since: 'v6.3.0', + until: 'v7.0.0', + }); return this.initialSeed; } diff --git a/test/faker.spec.ts b/test/faker.spec.ts index 05592e11863..a95bed31257 100644 --- a/test/faker.spec.ts +++ b/test/faker.spec.ts @@ -15,8 +15,19 @@ describe('faker', () => { locales: { en: { title: 'MyStuff' } }, }); - expect(myFaker.seedValue).toBeDefined(); - expect(myFaker.seedValue).toBeTypeOf('number'); + expect(myFaker.initialSeed).toBeDefined(); + expect(myFaker.initialSeed).toBeTypeOf('number'); + }); + + it('should log a deprecation warning if accessing seedValue', () => { + const spy = vi.spyOn(console, 'warn'); + + faker.seedValue; + + expect(spy).toHaveBeenCalledWith( + `[@faker-js/faker]: faker.seedValue is deprecated since v6.3.0 and will be removed in v7.0.0. Please use faker.initialSeed instead.` + ); + spy.mockRestore(); }); it('should throw error if no options passed', () => { From 33bad96bdc59b5bae2ebde02791efe006f7ddebf Mon Sep 17 00:00:00 2001 From: Shinigami92 Date: Wed, 20 Apr 2022 17:36:52 +0200 Subject: [PATCH 6/9] chore: do not use seedValue anymore --- src/faker.ts | 27 +++++---------------------- test/faker.spec.ts | 23 ++++++----------------- 2 files changed, 11 insertions(+), 39 deletions(-) diff --git a/src/faker.ts b/src/faker.ts index 73961428187..532272819a1 100644 --- a/src/faker.ts +++ b/src/faker.ts @@ -14,7 +14,6 @@ import { Git } from './git'; import { Hacker } from './hacker'; import { Helpers } from './helpers'; import { Image } from './image'; -import { deprecated } from './internal/deprecated'; import { Internet } from './internet'; import type { KnownLocale } from './locales'; import { Lorem } from './lorem'; @@ -50,7 +49,7 @@ export class Faker { readonly definitions: LocaleDefinition = this.initDefinitions(); - private _initialSeed: number | number[]; + private _seedValue: number | number[]; readonly fake: Fake['fake'] = new Fake(this).fake; readonly unique: Unique['unique'] = new Unique().unique; @@ -103,29 +102,12 @@ export class Faker { } /** - * The initial seed. + * The seed. * * Use the `seed` function to set a new seed. */ - public get initialSeed(): number | number[] { - return this._initialSeed; - } - - /** - * The initial seed. - * - * Use the `seed` function to set a new seed. - * - * @deprecated Use `initialSeed` instead. - */ public get seedValue(): number | number[] { - deprecated({ - deprecated: 'faker.seedValue', - proposed: 'faker.initialSeed', - since: 'v6.3.0', - until: 'v7.0.0', - }); - return this.initialSeed; + return this._seedValue; } /** @@ -183,10 +165,11 @@ export class Faker { * * @param seed The initial seed to use. */ + // TODO @Shinigami92 2022-04-20: Use get/set accessor instead of function (#855) seed( seed: number | number[] = Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER) ): void { - this._initialSeed = seed; + this._seedValue = seed; if (Array.isArray(seed) && seed.length) { this.mersenne.seed_array(seed); } else if (!Array.isArray(seed) && !isNaN(seed)) { diff --git a/test/faker.spec.ts b/test/faker.spec.ts index a95bed31257..d2de41cd16e 100644 --- a/test/faker.spec.ts +++ b/test/faker.spec.ts @@ -8,26 +8,15 @@ describe('faker', () => { faker.locale = 'en'; }); - it('should be possible to access the initial seed', () => { + it('should be possible to access the seed', () => { const myFaker = new Faker({ locale: 'en', localeFallback: 'en', locales: { en: { title: 'MyStuff' } }, }); - expect(myFaker.initialSeed).toBeDefined(); - expect(myFaker.initialSeed).toBeTypeOf('number'); - }); - - it('should log a deprecation warning if accessing seedValue', () => { - const spy = vi.spyOn(console, 'warn'); - - faker.seedValue; - - expect(spy).toHaveBeenCalledWith( - `[@faker-js/faker]: faker.seedValue is deprecated since v6.3.0 and will be removed in v7.0.0. Please use faker.initialSeed instead.` - ); - spy.mockRestore(); + expect(myFaker.seedValue).toBeDefined(); + expect(myFaker.seedValue).toBeTypeOf('number'); }); it('should throw error if no options passed', () => { @@ -112,14 +101,14 @@ describe('faker', () => { it('seed()', () => { faker.seed(); - expect(faker.initialSeed).toBeDefined(); - expect(faker.initialSeed).toBeTypeOf('number'); + expect(faker.seedValue).toBeDefined(); + expect(faker.seedValue).toBeTypeOf('number'); }); it('should reset the sequence when calling `seed`', () => { faker.seed(); - const seed = faker.initialSeed; + const seed = faker.seedValue; const num1 = faker.datatype.number(); From c3c49fbc1f9271cd09c45f1da98cb892401bf070 Mon Sep 17 00:00:00 2001 From: Shinigami92 Date: Fri, 22 Apr 2022 11:55:11 +0200 Subject: [PATCH 7/9] feat: return seed --- src/faker.ts | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/faker.ts b/src/faker.ts index 532272819a1..781fdd52f40 100644 --- a/src/faker.ts +++ b/src/faker.ts @@ -14,6 +14,7 @@ import { Git } from './git'; import { Hacker } from './hacker'; import { Helpers } from './helpers'; import { Image } from './image'; +import { deprecated } from './internal/deprecated'; import { Internet } from './internet'; import type { KnownLocale } from './locales'; import { Lorem } from './lorem'; @@ -105,8 +106,16 @@ export class Faker { * The seed. * * Use the `seed` function to set a new seed. + * + * @deprecated Use the return value of `faker.seed()` instead. */ public get seedValue(): number | number[] { + deprecated({ + deprecated: 'faker.seedValue', + proposed: 'return value of faker.seed()', + since: '6.3.0', + until: '7.0.0', + }); return this._seedValue; } @@ -163,18 +172,26 @@ export class Faker { /** * Setting the seed again resets the sequence. * - * @param seed The initial seed to use. + * @param seed The initial seed to use. Defaults to a random number. */ - // TODO @Shinigami92 2022-04-20: Use get/set accessor instead of function (#855) + seed(seed?: number): number; + /** + * Setting the seed again resets the sequence. + * + * @param seedArray The initial seed array to use. + */ + seed(seedArray: number[]): number[]; seed( seed: number | number[] = Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER) - ): void { + ): number | number[] { this._seedValue = seed; if (Array.isArray(seed) && seed.length) { this.mersenne.seed_array(seed); } else if (!Array.isArray(seed) && !isNaN(seed)) { this.mersenne.seed(seed); } + + return seed; } /** From 7ef6b2be551c532502382aa3c0a514716af39cce Mon Sep 17 00:00:00 2001 From: Shinigami92 Date: Fri, 22 Apr 2022 12:03:47 +0200 Subject: [PATCH 8/9] test: use seed function directly Co-authored-by: ST-DDT --- src/faker.ts | 65 ++++++++++++++++++++++++++++++++++----- test/address.spec.ts | 2 +- test/animal.spec.ts | 2 +- test/commerce.spec.ts | 2 +- test/company.spec.ts | 2 +- test/database.spec.ts | 2 +- test/datatype.spec.ts | 2 +- test/date.spec.ts | 2 +- test/faker.spec.ts | 24 ++++----------- test/finance.spec.ts | 6 ++-- test/finance_iban.spec.ts | 2 +- test/git.spec.ts | 2 +- test/hacker.spec.ts | 2 +- test/helpers.spec.ts | 2 +- test/internet.spec.ts | 2 +- test/lorem.spec.ts | 2 +- test/music.spec.ts | 2 +- test/name.spec.ts | 2 +- test/phone.spec.ts | 2 +- test/system.spec.ts | 2 +- test/time.spec.ts | 2 +- test/unique.spec.ts | 2 +- test/vehicle.spec.ts | 2 +- test/word.spec.ts | 2 +- 24 files changed, 87 insertions(+), 50 deletions(-) diff --git a/src/faker.ts b/src/faker.ts index 781fdd52f40..5ae0bd9c4a3 100644 --- a/src/faker.ts +++ b/src/faker.ts @@ -98,12 +98,11 @@ export class Faker { this.locales = opts.locales; this.locale = opts.locale || 'en'; this.localeFallback = opts.localeFallback || 'en'; - - this.seed(); } /** - * The seed. + * The seed that was last set. + * Please note that generated values are dependent on both the seed and the number of calls that have been made since it was set. * * Use the `seed` function to set a new seed. * @@ -170,15 +169,67 @@ export class Faker { } /** - * Setting the seed again resets the sequence. + * Sets the seed or generates a new one. + * + * Please note that generated values are dependent on both the seed and the + * number of calls that have been made since it was set. + * + * This method is intended to allow for consistent values in a tests, so you + * might want to use hardcoded values as the seed. + * + * In addition to that it can be used for creating truly random tests + * (by passing no arguments), that still can be reproduced if needed, + * by logging the result and explicitly setting it if needed. + * + * @param seed The seed to use. Defaults to a random number. + * @returns The seed that was set. + * + * @example + * // Consistent values for tests: + * faker.seed(42) + * faker.datatype.number(10); // 4 + * faker.datatype.number(10); // 8 + * + * faker.seed(42) + * faker.datatype.number(10); // 4 + * faker.datatype.number(10); // 8 * - * @param seed The initial seed to use. Defaults to a random number. + * @example + * // Random but reproducible tests: + * // Simply log the seed, and if you need to reproduce it, insert the seed here + * console.log('Running test with seed:', faker.seed()); */ seed(seed?: number): number; /** - * Setting the seed again resets the sequence. + * Sets the seed array. + * + * Please note that generated values are dependent on both the seed and the + * number of calls that have been made since it was set. + * + * This method is intended to allow for consistent values in a tests, so you + * might want to use hardcoded values as the seed. + * + * In addition to that it can be used for creating truly random tests + * (by passing no arguments), that still can be reproduced if needed, + * by logging the result and explicitly setting it if needed. + * + * @param seedArray The seed array to use. + * @returns The seed array that was set. + * + * @example + * // Consistent values for tests: + * faker.seed([42, 13, 17]) + * faker.datatype.number(10); // 4 + * faker.datatype.number(10); // 8 + * + * faker.seed([42, 13, 17]) + * faker.datatype.number(10); // 4 + * faker.datatype.number(10); // 8 * - * @param seedArray The initial seed array to use. + * @example + * // Random but reproducible tests: + * // Simply log the seed, and if you need to reproduce it, insert the seed here + * console.log('Running test with seed:', faker.seed()); */ seed(seedArray: number[]): number[]; seed( diff --git a/test/address.spec.ts b/test/address.spec.ts index f42afae14ae..6965abe80c7 100644 --- a/test/address.spec.ts +++ b/test/address.spec.ts @@ -284,7 +284,7 @@ describe('address', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('countryCode()', () => { diff --git a/test/animal.spec.ts b/test/animal.spec.ts index 5f081178912..a3ad1af6d42 100644 --- a/test/animal.spec.ts +++ b/test/animal.spec.ts @@ -99,7 +99,7 @@ describe('animal', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { for (const functionName of functionNames) { diff --git a/test/commerce.spec.ts b/test/commerce.spec.ts index d28f4ebe0c8..87385aa7903 100644 --- a/test/commerce.spec.ts +++ b/test/commerce.spec.ts @@ -78,7 +78,7 @@ describe('commerce', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe(`color()`, () => { diff --git a/test/company.spec.ts b/test/company.spec.ts index e66cb4c7cd6..6ef8b551aab 100644 --- a/test/company.spec.ts +++ b/test/company.spec.ts @@ -87,7 +87,7 @@ describe('company', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('suffixes()', () => { diff --git a/test/database.spec.ts b/test/database.spec.ts index dda919297b5..75fe6ac36ba 100644 --- a/test/database.spec.ts +++ b/test/database.spec.ts @@ -63,7 +63,7 @@ describe('database', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('column()', () => { diff --git a/test/datatype.spec.ts b/test/datatype.spec.ts index 45faf5b96ed..54504e02d33 100644 --- a/test/datatype.spec.ts +++ b/test/datatype.spec.ts @@ -422,7 +422,7 @@ describe('datatype', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('number', () => { diff --git a/test/date.spec.ts b/test/date.spec.ts index 6fddb631fb2..4b3350a45a4 100644 --- a/test/date.spec.ts +++ b/test/date.spec.ts @@ -365,7 +365,7 @@ describe('date', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('past()', () => { diff --git a/test/faker.spec.ts b/test/faker.spec.ts index d2de41cd16e..013f7a4e631 100644 --- a/test/faker.spec.ts +++ b/test/faker.spec.ts @@ -8,17 +8,6 @@ describe('faker', () => { faker.locale = 'en'; }); - it('should be possible to access the seed', () => { - const myFaker = new Faker({ - locale: 'en', - localeFallback: 'en', - locales: { en: { title: 'MyStuff' } }, - }); - - expect(myFaker.seedValue).toBeDefined(); - expect(myFaker.seedValue).toBeTypeOf('number'); - }); - it('should throw error if no options passed', () => { expect( () => @@ -99,23 +88,22 @@ describe('faker', () => { // The actual test is in mersenne.spec.ts describe('seed()', () => { it('seed()', () => { - faker.seed(); + const seed = faker.seed(); - expect(faker.seedValue).toBeDefined(); - expect(faker.seedValue).toBeTypeOf('number'); + expect(seed).toBeDefined(); + expect(seed).toBeTypeOf('number'); }); it('should reset the sequence when calling `seed`', () => { - faker.seed(); - - const seed = faker.seedValue; + const seed = faker.seed(); const num1 = faker.datatype.number(); - faker.seed(seed); + const newSeed = faker.seed(seed); const num2 = faker.datatype.number(); expect(num1).toBe(num2); + expect(newSeed).toBe(seed); const num3 = faker.datatype.number(); expect(num1).not.toBe(num3); diff --git a/test/finance.spec.ts b/test/finance.spec.ts index e087203d1a6..4656e1dea82 100644 --- a/test/finance.spec.ts +++ b/test/finance.spec.ts @@ -122,7 +122,7 @@ describe('finance', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('account()', () => { @@ -392,9 +392,7 @@ describe('finance', () => { }); it('should ignore case for issuer', () => { - const seed = faker.seedValue; - - faker.seed(seed); + const seed = faker.seed(); const actualNonLowerCase = faker.finance.creditCardNumber('ViSa'); faker.seed(seed); diff --git a/test/finance_iban.spec.ts b/test/finance_iban.spec.ts index 4d47e4bef01..a5936fafa0e 100644 --- a/test/finance_iban.spec.ts +++ b/test/finance_iban.spec.ts @@ -17,7 +17,7 @@ describe('finance_iban', () => { }); describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('specific IBAN country checks', () => { diff --git a/test/git.spec.ts b/test/git.spec.ts index 93ea42fff1e..30c00e8d98b 100644 --- a/test/git.spec.ts +++ b/test/git.spec.ts @@ -99,7 +99,7 @@ describe('git', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('branch()', () => { diff --git a/test/hacker.spec.ts b/test/hacker.spec.ts index 50aa42bea84..d0311f724a3 100644 --- a/test/hacker.spec.ts +++ b/test/hacker.spec.ts @@ -106,7 +106,7 @@ describe('name', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('abbreviation()', () => { diff --git a/test/helpers.spec.ts b/test/helpers.spec.ts index d50c29e4f89..95da8302319 100644 --- a/test/helpers.spec.ts +++ b/test/helpers.spec.ts @@ -491,7 +491,7 @@ describe('helpers', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('randomize()', () => { diff --git a/test/internet.spec.ts b/test/internet.spec.ts index 0de992b9756..f15692f083a 100644 --- a/test/internet.spec.ts +++ b/test/internet.spec.ts @@ -124,7 +124,7 @@ describe('internet', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('avatar', () => { diff --git a/test/lorem.spec.ts b/test/lorem.spec.ts index 8b6c88e70d1..1338e366502 100644 --- a/test/lorem.spec.ts +++ b/test/lorem.spec.ts @@ -119,7 +119,7 @@ describe('lorem', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('word()', () => { diff --git a/test/music.spec.ts b/test/music.spec.ts index bb52f4a2cd1..3fa51b8eaeb 100644 --- a/test/music.spec.ts +++ b/test/music.spec.ts @@ -52,7 +52,7 @@ describe('music', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('genre()', () => { diff --git a/test/name.spec.ts b/test/name.spec.ts index fe463c4dfc7..a182f5f0856 100644 --- a/test/name.spec.ts +++ b/test/name.spec.ts @@ -164,7 +164,7 @@ describe('name', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('firstName()', () => { diff --git a/test/phone.spec.ts b/test/phone.spec.ts index 47dec0144c1..17180156008 100644 --- a/test/phone.spec.ts +++ b/test/phone.spec.ts @@ -100,7 +100,7 @@ describe('phone', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('phoneNumber()', () => { diff --git a/test/system.spec.ts b/test/system.spec.ts index 9c606fe8b83..dc584ee6fde 100644 --- a/test/system.spec.ts +++ b/test/system.spec.ts @@ -84,7 +84,7 @@ describe('system', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('commonFileExt()', () => { diff --git a/test/time.spec.ts b/test/time.spec.ts index 8dfd6d64a3d..c9b7068df99 100644 --- a/test/time.spec.ts +++ b/test/time.spec.ts @@ -48,7 +48,7 @@ describe('time', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('recent()', () => { diff --git a/test/unique.spec.ts b/test/unique.spec.ts index b1b9e121e7e..e304092d5ba 100644 --- a/test/unique.spec.ts +++ b/test/unique.spec.ts @@ -81,7 +81,7 @@ describe('unique', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('unique()', () => { diff --git a/test/vehicle.spec.ts b/test/vehicle.spec.ts index c0d7bb50922..d6440814bb7 100644 --- a/test/vehicle.spec.ts +++ b/test/vehicle.spec.ts @@ -79,7 +79,7 @@ describe('vehicle', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe('vehicle()', () => { diff --git a/test/word.spec.ts b/test/word.spec.ts index 9dee16e9cd1..f3ef451c202 100644 --- a/test/word.spec.ts +++ b/test/word.spec.ts @@ -178,7 +178,7 @@ describe('word', () => { } describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) { describe(`adjective`, () => { From 6eb1cc2782bd441d7e8f014846386d5bf4d203dd Mon Sep 17 00:00:00 2001 From: Shinigami92 Date: Sun, 1 May 2022 12:15:48 +0200 Subject: [PATCH 9/9] test: use seed function --- test/random.spec.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/random.spec.ts b/test/random.spec.ts index a3c93562aea..bf081b5c4cc 100644 --- a/test/random.spec.ts +++ b/test/random.spec.ts @@ -99,11 +99,8 @@ describe('random', () => { }); } - // Create and log-back the seed for debug purposes - faker.seed(Math.ceil(Math.random() * 1_000_000_000)); - describe(`random seeded tests for seed ${JSON.stringify( - faker.seedValue + faker.seed() )}`, () => { describe.each(times(NON_SEEDED_BASED_RUN))('%s', () => { describe('arrayElement', () => {