Skip to content

Commit

Permalink
feat(config): respectGitIgnore option (#30972)
Browse files Browse the repository at this point in the history
Fixes #30553
  • Loading branch information
yury-s committed May 23, 2024
1 parent 20a23b3 commit a106428
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 1 deletion.
6 changes: 6 additions & 0 deletions docs/src/test-api/class-testconfig.md
Original file line number Diff line number Diff line change
Expand Up @@ -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]>
Expand Down
6 changes: 6 additions & 0 deletions docs/src/test-api/class-testproject.md
Original file line number Diff line number Diff line change
Expand Up @@ -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]>
Expand Down
2 changes: 1 addition & 1 deletion packages/playwright/src/common/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
Expand Down
18 changes: 18 additions & 0 deletions packages/playwright/types/test.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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).
Expand Down Expand Up @@ -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).
Expand Down
37 changes: 37 additions & 0 deletions tests/playwright-test/gitignore.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});

0 comments on commit a106428

Please sign in to comment.