Skip to content

Commit 2e2bf13

Browse files
authored
Merge branch 'main' into move-some-random-to-helpers
2 parents ce6df4f + 1851eca commit 2e2bf13

25 files changed

+136
-98
lines changed

src/faker.ts

Lines changed: 90 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { Git } from './git';
1414
import { Hacker } from './hacker';
1515
import { Helpers } from './helpers';
1616
import { Image } from './image';
17+
import { deprecated } from './internal/deprecated';
1718
import { Internet } from './internet';
1819
import type { KnownLocale } from './locales';
1920
import { Lorem } from './lorem';
@@ -49,7 +50,7 @@ export class Faker {
4950

5051
readonly definitions: LocaleDefinition = this.initDefinitions();
5152

52-
seedValue?: number | number[];
53+
private _seedValue: number | number[];
5354

5455
readonly fake: Fake['fake'] = new Fake(this).fake;
5556
readonly unique: Unique['unique'] = new Unique().unique;
@@ -99,6 +100,24 @@ export class Faker {
99100
this.localeFallback = opts.localeFallback || 'en';
100101
}
101102

103+
/**
104+
* The seed that was last set.
105+
* Please note that generated values are dependent on both the seed and the number of calls that have been made since it was set.
106+
*
107+
* Use the `seed` function to set a new seed.
108+
*
109+
* @deprecated Use the return value of `faker.seed()` instead.
110+
*/
111+
public get seedValue(): number | number[] {
112+
deprecated({
113+
deprecated: 'faker.seedValue',
114+
proposed: 'return value of faker.seed()',
115+
since: '6.3.0',
116+
until: '7.0.0',
117+
});
118+
return this._seedValue;
119+
}
120+
102121
/**
103122
* Creates a Proxy based LocaleDefinition that virtually merges the locales.
104123
*/
@@ -149,13 +168,81 @@ export class Faker {
149168
});
150169
}
151170

152-
seed(seed?: number | number[]): void {
153-
this.seedValue = seed;
171+
/**
172+
* Sets the seed or generates a new one.
173+
*
174+
* Please note that generated values are dependent on both the seed and the
175+
* number of calls that have been made since it was set.
176+
*
177+
* This method is intended to allow for consistent values in a tests, so you
178+
* might want to use hardcoded values as the seed.
179+
*
180+
* In addition to that it can be used for creating truly random tests
181+
* (by passing no arguments), that still can be reproduced if needed,
182+
* by logging the result and explicitly setting it if needed.
183+
*
184+
* @param seed The seed to use. Defaults to a random number.
185+
* @returns The seed that was set.
186+
*
187+
* @example
188+
* // Consistent values for tests:
189+
* faker.seed(42)
190+
* faker.datatype.number(10); // 4
191+
* faker.datatype.number(10); // 8
192+
*
193+
* faker.seed(42)
194+
* faker.datatype.number(10); // 4
195+
* faker.datatype.number(10); // 8
196+
*
197+
* @example
198+
* // Random but reproducible tests:
199+
* // Simply log the seed, and if you need to reproduce it, insert the seed here
200+
* console.log('Running test with seed:', faker.seed());
201+
*/
202+
seed(seed?: number): number;
203+
/**
204+
* Sets the seed array.
205+
*
206+
* Please note that generated values are dependent on both the seed and the
207+
* number of calls that have been made since it was set.
208+
*
209+
* This method is intended to allow for consistent values in a tests, so you
210+
* might want to use hardcoded values as the seed.
211+
*
212+
* In addition to that it can be used for creating truly random tests
213+
* (by passing no arguments), that still can be reproduced if needed,
214+
* by logging the result and explicitly setting it if needed.
215+
*
216+
* @param seedArray The seed array to use.
217+
* @returns The seed array that was set.
218+
*
219+
* @example
220+
* // Consistent values for tests:
221+
* faker.seed([42, 13, 17])
222+
* faker.datatype.number(10); // 4
223+
* faker.datatype.number(10); // 8
224+
*
225+
* faker.seed([42, 13, 17])
226+
* faker.datatype.number(10); // 4
227+
* faker.datatype.number(10); // 8
228+
*
229+
* @example
230+
* // Random but reproducible tests:
231+
* // Simply log the seed, and if you need to reproduce it, insert the seed here
232+
* console.log('Running test with seed:', faker.seed());
233+
*/
234+
seed(seedArray: number[]): number[];
235+
seed(
236+
seed: number | number[] = Math.ceil(Math.random() * Number.MAX_SAFE_INTEGER)
237+
): number | number[] {
238+
this._seedValue = seed;
154239
if (Array.isArray(seed) && seed.length) {
155240
this.mersenne.seed_array(seed);
156241
} else if (!Array.isArray(seed) && !isNaN(seed)) {
157242
this.mersenne.seed(seed);
158243
}
244+
245+
return seed;
159246
}
160247

161248
/**

test/address.spec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -283,11 +283,8 @@ describe('address', () => {
283283
});
284284
}
285285

286-
// Create and log-back the seed for debug purposes
287-
faker.seed(Math.ceil(Math.random() * 1_000_000_000));
288-
289286
describe(`random seeded tests for seed ${JSON.stringify(
290-
faker.seedValue
287+
faker.seed()
291288
)}`, () => {
292289
for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) {
293290
describe('countryCode()', () => {

test/animal.spec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,8 @@ describe('animal', () => {
9898
});
9999
}
100100

101-
// Create and log-back the seed for debug purposes
102-
faker.seed(Math.ceil(Math.random() * 1_000_000_000));
103-
104101
describe(`random seeded tests for seed ${JSON.stringify(
105-
faker.seedValue
102+
faker.seed()
106103
)}`, () => {
107104
for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) {
108105
for (const functionName of functionNames) {

test/commerce.spec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,8 @@ describe('commerce', () => {
7777
});
7878
}
7979

80-
// Create and log-back the seed for debug purposes
81-
faker.seed(Math.ceil(Math.random() * 1_000_000_000));
82-
8380
describe(`random seeded tests for seed ${JSON.stringify(
84-
faker.seedValue
81+
faker.seed()
8582
)}`, () => {
8683
for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) {
8784
describe(`color()`, () => {

test/company.spec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,11 +86,8 @@ describe('company', () => {
8686
});
8787
}
8888

89-
// Create and log-back the seed for debug purposes
90-
faker.seed(Math.ceil(Math.random() * 1_000_000_000));
91-
9289
describe(`random seeded tests for seed ${JSON.stringify(
93-
faker.seedValue
90+
faker.seed()
9491
)}`, () => {
9592
for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) {
9693
describe('suffixes()', () => {

test/database.spec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,8 @@ describe('database', () => {
6262
});
6363
}
6464

65-
// Create and log-back the seed for debug purposes
66-
faker.seed(Math.ceil(Math.random() * 1_000_000_000));
67-
6865
describe(`random seeded tests for seed ${JSON.stringify(
69-
faker.seedValue
66+
faker.seed()
7067
)}`, () => {
7168
for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) {
7269
describe('column()', () => {

test/datatype.spec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -421,11 +421,8 @@ describe('datatype', () => {
421421
});
422422
}
423423

424-
// Create and log-back the seed for debug purposes
425-
faker.seed(Math.ceil(Math.random() * 1_000_000_000));
426-
427424
describe(`random seeded tests for seed ${JSON.stringify(
428-
faker.seedValue
425+
faker.seed()
429426
)}`, () => {
430427
for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) {
431428
describe('number', () => {

test/date.spec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -364,11 +364,8 @@ describe('date', () => {
364364
});
365365
}
366366

367-
// Create and log-back the seed for debug purposes
368-
faker.seed(Math.ceil(Math.random() * 1_000_000_000));
369-
370367
describe(`random seeded tests for seed ${JSON.stringify(
371-
faker.seedValue
368+
faker.seed()
372369
)}`, () => {
373370
for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) {
374371
describe('past()', () => {

test/faker.spec.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,28 @@ describe('faker', () => {
8787
// This is only here for coverage
8888
// The actual test is in mersenne.spec.ts
8989
describe('seed()', () => {
90+
it('seed()', () => {
91+
const seed = faker.seed();
92+
93+
expect(seed).toBeDefined();
94+
expect(seed).toBeTypeOf('number');
95+
});
96+
97+
it('should reset the sequence when calling `seed`', () => {
98+
const seed = faker.seed();
99+
100+
const num1 = faker.datatype.number();
101+
102+
const newSeed = faker.seed(seed);
103+
const num2 = faker.datatype.number();
104+
105+
expect(num1).toBe(num2);
106+
expect(newSeed).toBe(seed);
107+
108+
const num3 = faker.datatype.number();
109+
expect(num1).not.toBe(num3);
110+
});
111+
90112
it('seed(number)', () => {
91113
faker.seed(1);
92114

test/finance.spec.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,8 @@ describe('finance', () => {
121121
});
122122
}
123123

124-
// Create and log-back the seed for debug purposes
125-
faker.seed(Math.ceil(Math.random() * 1_000_000_000));
126-
127124
describe(`random seeded tests for seed ${JSON.stringify(
128-
faker.seedValue
125+
faker.seed()
129126
)}`, () => {
130127
for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) {
131128
describe('account()', () => {
@@ -395,9 +392,7 @@ describe('finance', () => {
395392
});
396393

397394
it('should ignore case for issuer', () => {
398-
const seed = faker.seedValue;
399-
400-
faker.seed(seed);
395+
const seed = faker.seed();
401396
const actualNonLowerCase = faker.finance.creditCardNumber('ViSa');
402397

403398
faker.seed(seed);

test/finance_iban.spec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@ import ibanLib from '../src/utils/iban';
66
const NON_SEEDED_BASED_RUN = 25;
77

88
describe('finance_iban', () => {
9-
// Create and log-back the seed for debug purposes
10-
faker.seed(Math.ceil(Math.random() * 1_000_000_000));
11-
129
describe('generic IBAN country checks', () => {
1310
it.each(ibanLib.formats.map((entry) => entry.country))('%s', (country) => {
1411
expect(country).toMatch(/^[A-Z]{2}$/);
@@ -20,7 +17,7 @@ describe('finance_iban', () => {
2017
});
2118

2219
describe(`random seeded tests for seed ${JSON.stringify(
23-
faker.seedValue
20+
faker.seed()
2421
)}`, () => {
2522
for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) {
2623
describe('specific IBAN country checks', () => {

test/git.spec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,8 @@ describe('git', () => {
9898
});
9999
}
100100

101-
// Create and log-back the seed for debug purposes
102-
faker.seed(Math.ceil(Math.random() * 1_000_000_000));
103-
104101
describe(`random seeded tests for seed ${JSON.stringify(
105-
faker.seedValue
102+
faker.seed()
106103
)}`, () => {
107104
for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) {
108105
describe('branch()', () => {

test/hacker.spec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,8 @@ describe('name', () => {
105105
});
106106
}
107107

108-
// Create and log-back the seed for debug purposes
109-
faker.seed(Math.ceil(Math.random() * 1_000_000_000));
110-
111108
describe(`random seeded tests for seed ${JSON.stringify(
112-
faker.seedValue
109+
faker.seed()
113110
)}`, () => {
114111
for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) {
115112
describe('abbreviation()', () => {

test/helpers.spec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -490,11 +490,8 @@ describe('helpers', () => {
490490
});
491491
}
492492

493-
// Create and log-back the seed for debug purposes
494-
faker.seed(Math.ceil(Math.random() * 1_000_000_000));
495-
496493
describe(`random seeded tests for seed ${JSON.stringify(
497-
faker.seedValue
494+
faker.seed()
498495
)}`, () => {
499496
for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) {
500497
describe('arrayElement', () => {

test/internet.spec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,11 +123,8 @@ describe('internet', () => {
123123
});
124124
}
125125

126-
// Create and log-back the seed for debug purposes
127-
faker.seed(Math.ceil(Math.random() * 1_000_000_000));
128-
129126
describe(`random seeded tests for seed ${JSON.stringify(
130-
faker.seedValue
127+
faker.seed()
131128
)}`, () => {
132129
for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) {
133130
describe('avatar', () => {

test/lorem.spec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,8 @@ describe('lorem', () => {
118118
});
119119
}
120120

121-
// Create and log-back the seed for debug purposes
122-
faker.seed(Math.ceil(Math.random() * 1_000_000_000));
123-
124121
describe(`random seeded tests for seed ${JSON.stringify(
125-
faker.seedValue
122+
faker.seed()
126123
)}`, () => {
127124
for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) {
128125
describe('word()', () => {

test/music.spec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,8 @@ describe('music', () => {
5151
});
5252
}
5353

54-
// Create and log-back the seed for debug purposes
55-
faker.seed(Math.ceil(Math.random() * 1_000_000_000));
56-
5754
describe(`random seeded tests for seed ${JSON.stringify(
58-
faker.seedValue
55+
faker.seed()
5956
)}`, () => {
6057
for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) {
6158
describe('genre()', () => {

test/name.spec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -163,11 +163,8 @@ describe('name', () => {
163163
});
164164
}
165165

166-
// Create and log-back the seed for debug purposes
167-
faker.seed(Math.ceil(Math.random() * 1_000_000_000));
168-
169166
describe(`random seeded tests for seed ${JSON.stringify(
170-
faker.seedValue
167+
faker.seed()
171168
)}`, () => {
172169
for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) {
173170
describe('firstName()', () => {

test/phone.spec.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,8 @@ describe('phone', () => {
9999
});
100100
}
101101

102-
// Create and log-back the seed for debug purposes
103-
faker.seed(Math.ceil(Math.random() * 1_000_000_000));
104-
105102
describe(`random seeded tests for seed ${JSON.stringify(
106-
faker.seedValue
103+
faker.seed()
107104
)}`, () => {
108105
for (let i = 1; i <= NON_SEEDED_BASED_RUN; i++) {
109106
describe('phoneNumber()', () => {

0 commit comments

Comments
 (0)