aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorST-DDT <[email protected]>2022-03-24 09:21:24 +0100
committerGitHub <[email protected]>2022-03-24 08:21:24 +0000
commitfe62c1953c1b5755151c6d7562614f89733a6de1 (patch)
treee0c6f0d850b1dd1762ddd6c43de762794f8b34b4
parent7141cd7d8a2fd505d3338d13ca29fd1ab7a5dc80 (diff)
downloadfaker-fe62c1953c1b5755151c6d7562614f89733a6de1.tar.xz
faker-fe62c1953c1b5755151c6d7562614f89733a6de1.zip
refactor: set seed directly (#563)
-rw-r--r--src/datatype.ts9
-rw-r--r--src/faker.ts11
-rw-r--r--src/random.ts9
-rw-r--r--test/faker.spec.ts26
4 files changed, 35 insertions, 20 deletions
diff --git a/src/datatype.ts b/src/datatype.ts
index 5dc1793c..aa7139dd 100644
--- a/src/datatype.ts
+++ b/src/datatype.ts
@@ -4,14 +4,7 @@ import type { Faker } from '.';
* Module to generate various primitive values and data types.
*/
export class Datatype {
- constructor(private readonly faker: Faker, seed?: number | number[]) {
- // Use a user provided seed if it is an array or number
- if (Array.isArray(seed) && seed.length) {
- this.faker.mersenne.seed_array(seed);
- } else if (!Array.isArray(seed) && !isNaN(seed)) {
- this.faker.mersenne.seed(seed);
- }
-
+ constructor(private readonly faker: Faker) {
// Bind `this` so namespaced is working correctly
for (const name of Object.getOwnPropertyNames(Datatype.prototype)) {
if (name === 'constructor' || typeof this[name] !== 'function') {
diff --git a/src/faker.ts b/src/faker.ts
index 83f59a06..572bbaf2 100644
--- a/src/faker.ts
+++ b/src/faker.ts
@@ -129,10 +129,13 @@ export class Faker {
});
}
- seed(value?: number | number[]): void {
- this.seedValue = value;
- this.random = new Random(this, this.seedValue);
- this.datatype = new Datatype(this, this.seedValue);
+ seed(seed?: number | number[]): void {
+ 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);
+ }
}
/**
diff --git a/src/random.ts b/src/random.ts
index dd58c3ce..b84a2ece 100644
--- a/src/random.ts
+++ b/src/random.ts
@@ -18,14 +18,7 @@ function arrayRemove<T>(arr: T[], values: T[]): T[] {
* Generates random values of different kinds. Some methods are deprecated and have been moved to dedicated modules.
*/
export class Random {
- constructor(private readonly faker: Faker, seed?: number | number[]) {
- // Use a user provided seed if it is an array or number
- if (Array.isArray(seed) && seed.length) {
- this.faker.mersenne.seed_array(seed);
- } else if (!Array.isArray(seed) && !isNaN(seed)) {
- this.faker.mersenne.seed(seed);
- }
-
+ constructor(private readonly faker: Faker) {
// Bind `this` so namespaced is working correctly
for (const name of Object.getOwnPropertyNames(Random.prototype)) {
if (name === 'constructor' || typeof this[name] !== 'function') {
diff --git a/test/faker.spec.ts b/test/faker.spec.ts
new file mode 100644
index 00000000..54fa04ac
--- /dev/null
+++ b/test/faker.spec.ts
@@ -0,0 +1,26 @@
+import { beforeEach, describe, expect, it } from 'vitest';
+import { faker } from '../src';
+
+describe('faker', () => {
+ beforeEach(() => {
+ faker.locale = 'en';
+ });
+
+ // This is only here for coverage
+ // The actual test is in mersenne.spec.ts
+ describe('seed()', () => {
+ it('seed(number)', () => {
+ faker.seed(1);
+
+ const actual = faker.animal.cat();
+ expect(actual).toBe('Korat');
+ });
+
+ it('seed(number[])', () => {
+ faker.seed([1, 2, 3]);
+
+ const actual = faker.animal.cat();
+ expect(actual).toBe('Oriental');
+ });
+ });
+});