From 63c6fc5f4eccf1d7eab0b96752a939406a0031e3 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Thu, 27 Feb 2020 08:53:59 -0800 Subject: [PATCH] Toolkit: add junit reporting and jest.config.js to plugin build (#22450) --- .../src/cli/tasks/plugin/tests.ts | 4 +-- .../src/cli/tasks/toolkit.build.ts | 1 + .../src/config/jest.plugin.config.local.js | 8 +++++ .../src/config/jest.plugin.config.ts | 29 ++++++++++++++++++- 4 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 packages/grafana-toolkit/src/config/jest.plugin.config.local.js diff --git a/packages/grafana-toolkit/src/cli/tasks/plugin/tests.ts b/packages/grafana-toolkit/src/cli/tasks/plugin/tests.ts index d90cc6cf158..d6ed1909193 100644 --- a/packages/grafana-toolkit/src/cli/tasks/plugin/tests.ts +++ b/packages/grafana-toolkit/src/cli/tasks/plugin/tests.ts @@ -1,6 +1,6 @@ import * as jestCLI from 'jest-cli'; import { useSpinner } from '../../utils/useSpinner'; -import { jestConfig } from '../../../config/jest.plugin.config'; +import { loadJestPluginConfig } from '../../../config/jest.plugin.config'; export interface PluginTestOptions { updateSnapshot: boolean; @@ -13,7 +13,7 @@ export interface PluginTestOptions { export const testPlugin = useSpinner( 'Running tests', async ({ updateSnapshot, coverage, watch, testPathPattern, testNamePattern }) => { - const testConfig = jestConfig(); + const testConfig = loadJestPluginConfig(); const cliConfig = { config: JSON.stringify(testConfig), diff --git a/packages/grafana-toolkit/src/cli/tasks/toolkit.build.ts b/packages/grafana-toolkit/src/cli/tasks/toolkit.build.ts index db35034284c..d82dee384ab 100644 --- a/packages/grafana-toolkit/src/cli/tasks/toolkit.build.ts +++ b/packages/grafana-toolkit/src/cli/tasks/toolkit.build.ts @@ -60,6 +60,7 @@ const copyFiles = () => { 'src/config/tsconfig.plugin.local.json', 'src/config/eslint.plugin.json', 'src/config/styles.mock.js', + 'src/config/jest.plugin.config.local.js', // plugin test file 'src/plugins/e2e/commonPluginTests.ts', diff --git a/packages/grafana-toolkit/src/config/jest.plugin.config.local.js b/packages/grafana-toolkit/src/config/jest.plugin.config.local.js new file mode 100644 index 00000000000..bcf17c9087d --- /dev/null +++ b/packages/grafana-toolkit/src/config/jest.plugin.config.local.js @@ -0,0 +1,8 @@ +// This file is needed because it is used by vscode and other tools that +// call `jest` directly. However, unless you are doing anything special +// do not edit this file + +const standard = require('@grafana/toolkit/src/config/jest.plugin.config'); + +// This process will use the same config that `yarn test` is using +module.exports = standard.jestConfig(); diff --git a/packages/grafana-toolkit/src/config/jest.plugin.config.ts b/packages/grafana-toolkit/src/config/jest.plugin.config.ts index 19acbe85375..97511c57ff1 100644 --- a/packages/grafana-toolkit/src/config/jest.plugin.config.ts +++ b/packages/grafana-toolkit/src/config/jest.plugin.config.ts @@ -57,9 +57,23 @@ export const jestConfig = (baseDir: string = process.cwd()) => { moduleDirectories: ['node_modules', 'src'], moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'], setupFiles, - globals: { 'ts-jest': { isolatedModules: true } }, + globals: { + 'ts-jest': { + isolatedModules: true, + tsConfig: path.resolve(baseDir, 'tsconfig.json'), + }, + }, coverageReporters: ['json-summary', 'text', 'lcov'], collectCoverageFrom: ['src/**/*.{ts,tsx}', '!**/node_modules/**', '!**/vendor/**'], + reporters: [ + 'default', + [ + 'jest-junit', + { + outputDirectory: 'coverage', + }, + ], + ], testMatch: [ '/src/**/__tests__/**/*.{js,jsx,ts,tsx}', '/src/**/*.{spec,test,jest}.{js,jsx,ts,tsx}', @@ -80,3 +94,16 @@ export const jestConfig = (baseDir: string = process.cwd()) => { ...otherOverrides, }; }; + +/** + * This will load the existing just setup, or use the default if it exists + */ +export const loadJestPluginConfig = (baseDir: string = process.cwd()) => { + const cfgpath = path.resolve(baseDir, 'jest.config.js'); + if (!fs.existsSync(cfgpath)) { + const src = path.resolve(baseDir, 'node_modules/@grafana/toolkit/src/config/jest.plugin.config.local.js'); + fs.copyFileSync(src, cfgpath); + console.log('Using standard jest plugin config', src); + } + return require(cfgpath); +};