mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Chore: Make betterer tests more stable (#51703)
* rewrite eslint test to not care about position of errors * changing file contents shouldn't require a betterer.results update * fix up eslint test * fix the undocumented stories test * ignore .test.ts files as well
This commit is contained in:
22458
.betterer.results
22458
.betterer.results
File diff suppressed because it is too large
Load Diff
68
.betterer.ts
68
.betterer.ts
@@ -1,28 +1,18 @@
|
|||||||
import { regexp } from '@betterer/regexp';
|
import { regexp } from '@betterer/regexp';
|
||||||
import { eslint } from '@betterer/eslint';
|
|
||||||
import { BettererFileTest } from '@betterer/betterer';
|
import { BettererFileTest } from '@betterer/betterer';
|
||||||
|
import { ESLint, Linter } from 'eslint';
|
||||||
|
import { existsSync } from 'fs';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
'no enzyme tests': () => regexp(/from 'enzyme'/g).include('**/*.test.*'),
|
'no enzyme tests': () => regexp(/from 'enzyme'/g).include('**/*.test.*'),
|
||||||
'better eslint': () =>
|
'better eslint': () => countEslintErrors().include('**/*.{ts,tsx}'),
|
||||||
eslint({
|
'no undocumented stories': () => countUndocumentedStories().include('**/*.story.tsx'),
|
||||||
'@typescript-eslint/no-explicit-any': 'error',
|
|
||||||
'@typescript-eslint/consistent-type-assertions': [
|
|
||||||
'error',
|
|
||||||
{
|
|
||||||
assertionStyle: 'never',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
}).include('**/*.{ts,tsx}'),
|
|
||||||
'no undocumented stories': () => countUndocumentedStories().include('**/*.{story.tsx,mdx}'),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
function countUndocumentedStories() {
|
function countUndocumentedStories() {
|
||||||
return new BettererFileTest(async (filePaths, fileTestResult) => {
|
return new BettererFileTest(async (filePaths, fileTestResult) => {
|
||||||
const storyFilePaths = filePaths.filter((filePath) => filePath.endsWith('story.tsx'));
|
filePaths.forEach((filePath) => {
|
||||||
const mdxFilePaths = filePaths.filter((filePath) => filePath.endsWith('mdx'));
|
if (!existsSync(filePath.replace(/\.story.tsx$/, '.mdx'))) {
|
||||||
storyFilePaths.forEach((filePath) => {
|
|
||||||
if (!mdxFilePaths.includes(filePath.replace(/\.story.tsx$/, '.mdx'))) {
|
|
||||||
// In this case the file contents don't matter:
|
// In this case the file contents don't matter:
|
||||||
const file = fileTestResult.addFile(filePath, '');
|
const file = fileTestResult.addFile(filePath, '');
|
||||||
// Add the issue to the first character of the file:
|
// Add the issue to the first character of the file:
|
||||||
@@ -31,3 +21,49 @@ function countUndocumentedStories() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function countEslintErrors() {
|
||||||
|
return new BettererFileTest(async (filePaths, fileTestResult, resolver) => {
|
||||||
|
const { baseDirectory } = resolver;
|
||||||
|
const cli = new ESLint({ cwd: baseDirectory });
|
||||||
|
|
||||||
|
await Promise.all(
|
||||||
|
filePaths.map(async (filePath) => {
|
||||||
|
const linterOptions = (await cli.calculateConfigForFile(filePath)) as Linter.Config;
|
||||||
|
|
||||||
|
const rules: Partial<Linter.RulesRecord> = {
|
||||||
|
'@typescript-eslint/no-explicit-any': 'error',
|
||||||
|
};
|
||||||
|
|
||||||
|
if (!filePath.endsWith('.test.tsx') && !filePath.endsWith('.test.ts')) {
|
||||||
|
rules['@typescript-eslint/consistent-type-assertions'] = [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
assertionStyle: 'never',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
const runner = new ESLint({
|
||||||
|
baseConfig: {
|
||||||
|
...linterOptions,
|
||||||
|
rules,
|
||||||
|
},
|
||||||
|
useEslintrc: false,
|
||||||
|
cwd: baseDirectory,
|
||||||
|
});
|
||||||
|
|
||||||
|
const lintResults = await runner.lintFiles([filePath]);
|
||||||
|
lintResults
|
||||||
|
.filter((lintResult) => lintResult.source)
|
||||||
|
.forEach((lintResult) => {
|
||||||
|
const { messages } = lintResult;
|
||||||
|
const file = fileTestResult.addFile(filePath, '');
|
||||||
|
messages.forEach((message, index) => {
|
||||||
|
file.addIssue(0, 0, message.message, `${index}`);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user