feat(config): respectGitIgnore option (#30972)

Fixes https://github.com/microsoft/playwright/issues/30553
This commit is contained in:
Yury Semikhatsky 2024-05-23 12:05:02 -07:00 committed by GitHub
parent 20a23b3485
commit a106428114
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 68 additions and 1 deletions

View File

@ -439,6 +439,12 @@ export default defineConfig({
Test files that took more than `threshold` milliseconds are considered slow, and the slowest ones are reported, no more than `max` number of them. Passing zero as `max` reports all test files that exceed the threshold.
## property: TestConfig.respectGitIgnore
* since: v1.45
- type: ?<[boolean]>
Whether to skip entries from `.gitignore` when searching for test files. By default, if neither [`property: TestConfig.testDir`] nor [`property: TestProject.testDir`] are explicitely specified, Playwright will ignore any test files matching `.gitignore` entries. This option allows to override that behavior.
## property: TestConfig.retries
* since: v1.10
- type: ?<[int]>

View File

@ -223,6 +223,12 @@ The number of times to repeat each test, useful for debugging flaky tests.
Use [`property: TestConfig.repeatEach`] to change this option for all projects.
## property: TestProject.respectGitIgnore
* since: v1.45
- type: ?<[boolean]>
Whether to skip entries from `.gitignore` when searching for test files. By default, if neither [`property: TestConfig.testDir`] nor [`property: TestProject.testDir`] are explicitely specified, Playwright will ignore any test files matching `.gitignore` entries. This option allows to override that behavior.
## property: TestProject.retries
* since: v1.10
- type: ?<[int]>

View File

@ -196,7 +196,7 @@ export class FullProjectInternal {
const stylePaths = Array.isArray(this.expect.toHaveScreenshot.stylePath) ? this.expect.toHaveScreenshot.stylePath : [this.expect.toHaveScreenshot.stylePath];
this.expect.toHaveScreenshot.stylePath = stylePaths.map(stylePath => path.resolve(configDir, stylePath));
}
this.respectGitIgnore = !projectConfig.testDir && !config.testDir;
this.respectGitIgnore = takeFirst(projectConfig.respectGitIgnore, config.respectGitIgnore, !projectConfig.testDir && !config.testDir);
this.ignoreSnapshots = takeFirst(configCLIOverrides.ignoreSnapshots, projectConfig.ignoreSnapshots, config.ignoreSnapshots, false);
}
}

View File

@ -363,6 +363,15 @@ interface TestProject<TestArgs = {}, WorkerArgs = {}> {
*/
repeatEach?: number;
/**
* Whether to skip entries from `.gitignore` when searching for test files. By default, if neither
* [testConfig.testDir](https://playwright.dev/docs/api/class-testconfig#test-config-test-dir) nor
* [testProject.testDir](https://playwright.dev/docs/api/class-testproject#test-project-test-dir) are explicitely
* specified, Playwright will ignore any test files matching `.gitignore` entries. This option allows to override that
* behavior.
*/
respectGitIgnore?: boolean;
/**
* The maximum number of retry attempts given to failed tests. Learn more about
* [test retries](https://playwright.dev/docs/test-retries#retries).
@ -1360,6 +1369,15 @@ interface TestConfig<TestArgs = {}, WorkerArgs = {}> {
threshold: number;
};
/**
* Whether to skip entries from `.gitignore` when searching for test files. By default, if neither
* [testConfig.testDir](https://playwright.dev/docs/api/class-testconfig#test-config-test-dir) nor
* [testProject.testDir](https://playwright.dev/docs/api/class-testproject#test-project-test-dir) are explicitely
* specified, Playwright will ignore any test files matching `.gitignore` entries. This option allows to override that
* behavior.
*/
respectGitIgnore?: boolean;
/**
* The maximum number of retry attempts given to failed tests. By default failing tests are not retried. Learn more
* about [test retries](https://playwright.dev/docs/test-retries#retries).

View File

@ -157,3 +157,40 @@ test('should ignore .gitignore inside project testDir', async ({ runInlineTest }
expect(result.passed).toBe(2);
});
test('global config respectGitIgnore', {
annotation: { type: 'issue', description: 'https://github.com/microsoft/playwright/issues/30553' }
}, async ({ runInlineTest }) => {
const result = await runInlineTest({
'tests/.gitignore': `
*.js
`,
'playwright.config.js': `
module.exports = { respectGitIgnore: false, projects: [{ }] };
`,
'tests/a.spec.js': `
import { test, expect } from '@playwright/test';
test('pass', ({}) => {});
`,
});
expect(result.exitCode).toBe(0);
expect(result.passed).toBe(1);
});
test('project config respectGitIgnore', {
annotation: { type: 'issue', description: 'https://github.com/microsoft/playwright/issues/30553' }
}, async ({ runInlineTest }) => {
const result = await runInlineTest({
'tests/.gitignore': `
*.js
`,
'playwright.config.js': `
module.exports = { projects: [{ respectGitIgnore: false }] };
`,
'tests/a.spec.js': `
import { test, expect } from '@playwright/test';
test('pass', ({}) => {});
`,
});
expect(result.exitCode).toBe(0);
expect(result.passed).toBe(1);
});