aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorST-DDT <[email protected]>2022-03-28 18:48:35 +0200
committerGitHub <[email protected]>2022-03-28 16:48:35 +0000
commit9fad09a71c1579009cb94b79e003c437a22f43a5 (patch)
tree5db81559f68f4eb3975b0d8107d9ad7c6a42e30e
parent814880b5b209d6f9c6ffb2c0ab5342c4c456b0b7 (diff)
downloadfaker-9fad09a71c1579009cb94b79e003c437a22f43a5.tar.xz
faker-9fad09a71c1579009cb94b79e003c437a22f43a5.zip
test: fix all_functional tests (#609)
-rw-r--r--test/all_functional.spec.ts88
1 files changed, 49 insertions, 39 deletions
diff --git a/test/all_functional.spec.ts b/test/all_functional.spec.ts
index a6166161..548f06c5 100644
--- a/test/all_functional.spec.ts
+++ b/test/all_functional.spec.ts
@@ -11,10 +11,6 @@ const IGNORED_MODULES = [
'mersenne',
];
-const IGNORED_METHODS = {
- system: ['directoryPath', 'filePath'], // these are TODOs
-};
-
function isTestableModule(mod: string) {
return IGNORED_MODULES.indexOf(mod) === -1;
}
@@ -23,27 +19,45 @@ function isMethodOf(mod: string) {
return (meth: string) => typeof faker[mod][meth] === 'function';
}
-function isTestableMethod(mod: string) {
- return (meth: string) =>
- !(mod in IGNORED_METHODS && IGNORED_METHODS[mod].indexOf(meth) >= 0);
-}
+const BROKEN_LOCALE_METHODS = {
+ // TODO ST-DDT 2022-03-28: these are TODOs (usually broken locale files)
+ address: {
+ cityPrefix: ['pt_BR', 'pt_PT'],
+ citySuffix: ['pt_PT'],
+ countryCode: ['he'],
+ state: ['az', 'cz', 'nb_NO', 'sk'],
+ stateAbbr: ['cz', 'sk'],
+ },
+ company: {
+ companySuffix: ['az'],
+ },
+ name: {
+ prefix: ['az', 'id_ID', 'ru'],
+ suffix: ['az', 'it', 'mk', 'pt_PT', 'ru'],
+ },
+};
-function both(
- pred1: (meth: string) => boolean,
- pred2: (meth: string) => boolean
-): (meth: string) => boolean {
- return (value) => pred1(value) && pred2(value);
+function isWorkingLocaleForMethod(
+ mod: string,
+ meth: string,
+ locale: string
+): boolean {
+ return (BROKEN_LOCALE_METHODS[mod]?.[meth] ?? []).indexOf(locale) === -1;
}
// Basic smoke tests to make sure each method is at least implemented and returns a value.
function modulesList(): { [module: string]: string[] } {
const modules = Object.keys(faker)
+ .sort()
.filter(isTestableModule)
.reduce((result, mod) => {
- result[mod] = Object.keys(faker[mod]).filter(
- both(isMethodOf(mod), isTestableMethod(mod))
- );
+ const methods = Object.keys(faker[mod]).filter(isMethodOf(mod));
+ if (methods.length) {
+ result[mod] = methods;
+ } else {
+ console.log(`Skipping ${mod} - No testable methods`);
+ }
return result;
}, {});
@@ -55,23 +69,29 @@ const modules = modulesList();
describe('functional tests', () => {
for (const locale in faker.locales) {
describe(locale, () => {
- faker.locale = locale;
Object.keys(modules).forEach((module) => {
describe(module, () => {
- // if there is nothing to test, create a dummy test so the test runner doesn't complain
- if (Object.keys(modules[module]).length === 0) {
- it.todo(`${module} was empty`);
- }
-
modules[module].forEach((meth) => {
- it(meth + '()', () => {
+ const testAssertion = () => {
+ faker.locale = locale;
+ // TODO ST-DDT 2022-03-28: Use random seed once there are no more failures
+ faker.seed(1);
const result = faker[module][meth]();
+
if (meth === 'boolean') {
expect(result).toBeTypeOf('boolean');
} else {
expect(result).toBeTruthy();
}
- });
+ };
+
+ if (isWorkingLocaleForMethod(module, meth, locale)) {
+ it(meth + '()', testAssertion);
+ } else {
+ // TODO ST-DDT 2022-03-28: Remove once there are no more failures
+ // We expect a failure here to ensure we remove the exclusions when fixed
+ it.fails(meth + '()', testAssertion);
+ }
});
});
});
@@ -82,26 +102,16 @@ describe('functional tests', () => {
describe('faker.fake functional tests', () => {
for (const locale in faker.locales) {
describe(locale, () => {
- faker.locale = locale;
- faker.seed(1);
Object.keys(modules).forEach((module) => {
describe(module, () => {
- // if there is nothing to test, create a dummy test so the test runner doesn't complain
- if (Object.keys(modules[module]).length === 0) {
- it.todo(`${module} was empty`);
- }
-
modules[module].forEach((meth) => {
it(meth + '()', () => {
+ faker.locale = locale;
+ // TODO ST-DDT 2022-03-28: Use random seed once there are no more failures
+ faker.seed(1);
const result = faker.fake('{{' + module + '.' + meth + '}}');
- // just make sure any result is returned
- // an undefined result usually means an error
- expect(result).toBeDefined();
- // if (meth === 'boolean') {
- // expect(result).toBeTypeOf('boolean');
- // } else {
- // expect(result).toBeTruthy();
- // }
+
+ expect(result).toBeTypeOf('string');
});
});
});