Skip to content

Commit

Permalink
feat: create jest config file
Browse files Browse the repository at this point in the history
  • Loading branch information
atanasster committed Mar 20, 2021
1 parent c236316 commit 1106e89
Show file tree
Hide file tree
Showing 21 changed files with 206 additions and 83 deletions.
4 changes: 2 additions & 2 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -180,9 +180,9 @@
{
"type": "node",
"request": "launch",
"name": "jest collector",
"name": "jest testing",
"program": "${workspaceFolder}/node_modules/.bin/jest",
"cwd": "${workspaceFolder}/core/jest-collector",
"cwd": "${workspaceFolder}/core/jest-testing",
"args": ["sum"],
"console": "integratedTerminal",
"internalConsoleOptions": "neverOpen",
Expand Down
2 changes: 0 additions & 2 deletions core/jest-collector/.fixtures/coverage/coverage-final.json

This file was deleted.

7 changes: 0 additions & 7 deletions core/jest-collector/.fixtures/jest.config.js

This file was deleted.

46 changes: 0 additions & 46 deletions core/jest-collector/src/index.ts

This file was deleted.

22 changes: 0 additions & 22 deletions core/jest-collector/test/sum.test.ts

This file was deleted.

File renamed without changes.
File renamed without changes.
12 changes: 12 additions & 0 deletions core/jest-testing/.fixtures/__jest-1/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module.exports = {
"preset": "ts-jest",
"transform": {
"^.+\\.(ts|tsx)?$": "ts-jest",
"^.+\\.(js|jsx)$": "babel-jest"
},
"collectCoverageFrom": [
"**/*.{js,jsx,tsx,ts}",
"!**/jest.config.js"
]
}

8 changes: 8 additions & 0 deletions core/jest-testing/.fixtures/__jest-2/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module.exports = {
"preset": "ts-jest",
"transform": {
"^.+\\.(ts|tsx)?$": "ts-jest",
"^.+\\.(js|jsx)$": "babel-jest"
}
}

8 changes: 8 additions & 0 deletions core/jest-testing/.fixtures/__jest-3/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module.exports = {
"preset": "ts-jest",
"transform": {
"^.+\\.(ts|tsx)?$": "ts-jest",
"^.+\\.(js|jsx)$": "babel-jest"
}
}

8 changes: 8 additions & 0 deletions core/jest-testing/.fixtures/__jest-4/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module.exports = {
"preset": "ts-jest",
"transform": {
"^.+\\.(ts|tsx)?$": "ts-jest",
"^.+\\.(js|jsx)$": "babel-jest"
}
}

12 changes: 12 additions & 0 deletions core/jest-testing/.fixtures/__jest-5/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
module.exports = {
"preset": "ts-jest",
"transform": {
"^.+\\.(ts|tsx)?$": "ts-jest",
"^.+\\.(js|jsx)$": "babel-jest"
},
"collectCoverageFrom": [
"**/*.{js,jsx,tsx,ts}",
"!**/jest.config.js"
]
}

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@component-controls/jest-collector",
"name": "@component-controls/jest-testing",
"version": "3.4.5",
"description": "Given a file, gets the associated jest tests and their results",
"description": "Given a test file, extracts the tests, test results and coverage data",
"keywords": [
"jest",
"testing"
Expand Down Expand Up @@ -30,13 +30,12 @@
"repository": {
"type": "git",
"url": "https://github.com/ccontrols/component-controls.git",
"directory": "core/jest-collector"
"directory": "core/jest-testing"
},
"license": "MIT",
"dependencies": {
"jest-cli": "^26.4.2",
"babel-jest": "^26.4.4",
"istanbul-lib-coverage": "^3.0.0",
"ts-jest": "^26.4.4"
},
"devDependencies": {
Expand Down
File renamed without changes.
96 changes: 96 additions & 0 deletions core/jest-testing/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
import fs from 'fs';
import path from 'path';
import { runCLI } from 'jest';
import { Config } from '@jest/types';
import { AssertionResult, AggregatedResult } from '@jest/test-result';
import { FileCoverage, CoverageSummary } from 'istanbul-lib-coverage';

export const getUniqueFolder = (folder: string): string => {
let fnId = 1;
const fName = () => path.resolve(folder, `__jest-${fnId}`);
while (fs.existsSync(fName())) {
fnId += 1;
}
const folderName = fName();
fs.mkdirSync(folderName);
return folderName;
};
export interface JestResults {
/**
* test results
*/
testResults: AssertionResult[];
/**
* coverage summary data, by file
*/
coverage: Record<string, CoverageSummary>;
}
export const run = async (
testFilePath: string,
jestConfig?: Partial<Config.Argv>,
): Promise<JestResults | undefined> => {
const testFolder = path.dirname(testFilePath);
const testFile = path.basename(testFilePath);
const configFolder = getUniqueFolder(testFolder);
const configFile = path.resolve(configFolder, 'jest.config.js');
fs.writeFileSync(
configFile,
`module.exports = ${JSON.stringify(
{
rootDir: '..',
preset: 'ts-jest',
transform: {
'^.+\\.(ts|tsx)?$': 'ts-jest',
'^.+\\.(js|jsx)$': 'babel-jest',
},
collectCoverageFrom: [
'**/*.{js,jsx,tsx,ts}',
'!**/jest.config.js',
'!**/*.{test,spec}.{js,ts}',
],
},
null,
2,
)}
`,
'utf8',
);
let runResults: {
results: AggregatedResult;
globalConfig: Config.GlobalConfig;
};
try {
runResults = await runCLI(
{
$0: testFile,
silent: true,
verbose: false,
reporters: [],
coverage: true,
coverageReporters: ['none'],
watchman: false,
...jestConfig,
} as Config.Argv,
[configFolder],
);
} catch (err) {
console.error(err);
return undefined;
} finally {
fs.unlinkSync(configFile);
fs.rmdirSync(configFolder, { recursive: true });
}
const cov = runResults.results.coverageMap;
const result: JestResults = {
testResults: runResults.results.testResults[0].testResults,
coverage: {},
};
if (cov) {
Object.keys(cov.data).forEach(file => {
const fc = cov.data[file] as FileCoverage;
result.coverage[path.relative(testFolder, file)] = fc.toSummary();
});
}

return result;
};
57 changes: 57 additions & 0 deletions core/jest-testing/test/sum.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import path from 'path';
import { run } from '../src';

type Await<T> = T extends PromiseLike<infer U> ? U : T;

let results: Await<ReturnType<typeof run>>;
beforeAll(async () => {
results = await run(path.resolve(__dirname, '../.fixtures/sum.test.js'));
}, 50000);

describe('small test', () => {
it('testResults ', () => {
expect(results?.testResults[0]).toMatchObject({
ancestorTitles: ['testing sum'],
failureDetails: [],
failureMessages: [],
fullName: 'testing sum sum',
location: null,
numPassingAsserts: 0,
status: 'passed',
title: 'sum',
});
});

it('coverage ', () => {
expect(results?.coverage).toMatchObject({
'sum.js': {
data: {
lines: {
total: 1,
covered: 1,
skipped: 0,
pct: 100,
},
functions: {
total: 1,
covered: 1,
skipped: 0,
pct: 100,
},
statements: {
total: 2,
covered: 2,
skipped: 0,
pct: 100,
},
branches: {
total: 0,
covered: 0,
skipped: 0,
pct: 100,
},
},
},
});
});
});
File renamed without changes.

0 comments on commit 1106e89

Please sign in to comment.