Skip to content

Commit 7f690c9

Browse files
committed
Tests: configure browser.locators.exact: true
1 parent 09ebcb8 commit 7f690c9

10 files changed

Lines changed: 39 additions & 61 deletions

package.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -56,29 +56,29 @@
5656
"@types/node": "^25.5.0",
5757
"@types/react": "^19.2.14",
5858
"@types/react-dom": "^19.2.3",
59-
"@typescript/native-preview": "^7.0.0-dev.20260401.1",
59+
"@typescript/native-preview": "^7.0.0-dev.20260407.1",
6060
"@vitejs/plugin-react": "^6.0.1",
61-
"@vitest/browser-playwright": "^4.1.2",
62-
"@vitest/coverage-istanbul": "^4.1.2",
63-
"@vitest/eslint-plugin": "^1.6.13",
61+
"@vitest/browser-playwright": "^4.1.3",
62+
"@vitest/coverage-istanbul": "^4.1.3",
63+
"@vitest/eslint-plugin": "^1.6.14",
6464
"clsx": "^2.1.1",
6565
"ecij": "^0.4.1",
6666
"eslint": "^10.0.3",
6767
"eslint-plugin-react-hooks": "^7.0.1",
6868
"eslint-plugin-sonarjs": "^4.0.2",
6969
"jspdf": "^4.2.0",
7070
"jspdf-autotable": "^5.0.7",
71-
"oxfmt": "0.43.0",
71+
"oxfmt": "0.44.0",
7272
"playwright": "~1.59.0",
7373
"postcss": "^8.5.2",
7474
"react": "^19.2.4",
7575
"react-dom": "^19.2.4",
7676
"tsdown": "^0.21.7",
7777
"typescript": "~6.0.2",
7878
"typescript-eslint": "^8.58.0",
79-
"vite": "^8.0.3",
80-
"vitest": "^4.1.2",
81-
"vitest-browser-react": "^2.1.0"
79+
"vite": "^8.0.6",
80+
"vitest": "^4.1.3",
81+
"vitest-browser-react": "^2.2.0"
8282
},
8383
"peerDependencies": {
8484
"react": "^19.2",

test/browser/column/cellClass.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ test('cellClass is a string', async () => {
3535
await setup({ columns, rows });
3636
const cell1 = page.getCell({ name: '0' });
3737
const cell2 = page.getCell({ name: '1' });
38-
await expect.element(cell1).toHaveClass(`${cellClassname} my-cell`, { exact: true });
39-
await expect.element(cell2).toHaveClass(`${cellClassname} my-cell`, { exact: true });
38+
await expect.element(cell1).toHaveClass(cellClassname, 'my-cell', { exact: true });
39+
await expect.element(cell2).toHaveClass(cellClassname, 'my-cell', { exact: true });
4040
});
4141

4242
test('cellClass returns a string', async () => {
@@ -50,8 +50,8 @@ test('cellClass returns a string', async () => {
5050
await setup({ columns, rows });
5151
const cell1 = page.getCell({ name: '0' });
5252
const cell2 = page.getCell({ name: '1' });
53-
await expect.element(cell1).toHaveClass(`${cellClassname} my-cell-0`, { exact: true });
54-
await expect.element(cell2).toHaveClass(`${cellClassname} my-cell-1`, { exact: true });
53+
await expect.element(cell1).toHaveClass(cellClassname, 'my-cell-0', { exact: true });
54+
await expect.element(cell2).toHaveClass(cellClassname, 'my-cell-1', { exact: true });
5555
});
5656

5757
test('cellClass returns undefined', async () => {

test/browser/column/frozen.test.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,8 @@ test('frozen column have a specific class, and are stable-sorted before non-froz
3838
await expect.element(cell3).toHaveTextContent('col2');
3939
await expect.element(cell4).toHaveTextContent('col4');
4040

41-
await expect
42-
.element(cell1)
43-
.toHaveClass(`${cellClassname} ${cellFrozenClassname}`, { exact: true });
44-
await expect
45-
.element(cell2)
46-
.toHaveClass(`${cellClassname} ${cellFrozenClassname}`, { exact: true });
41+
await expect.element(cell1).toHaveClass(cellClassname, cellFrozenClassname, { exact: true });
42+
await expect.element(cell2).toHaveClass(cellClassname, cellFrozenClassname, { exact: true });
4743
await expect.element(cell3).toHaveClass(cellClassname, { exact: true });
4844
await expect.element(cell4).toHaveClass(cellClassname, { exact: true });
4945
});

test/browser/column/headerCellClass.test.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,7 @@ test('headerCellClass is either nullish or a string', async () => {
2121

2222
await setup({ columns, rows: [] });
2323
await expect.element(headerCells.nth(0)).toHaveClass(cellClassname, { exact: true });
24-
await expect
25-
.element(headerCells.nth(1))
26-
.toHaveClass(`${cellClassname} my-header`, { exact: true });
24+
await expect.element(headerCells.nth(1)).toHaveClass(cellClassname, 'my-header', { exact: true });
2725
});
2826

2927
test('columnGroup.headerCellClass is either nullish or a string', async () => {
@@ -41,7 +39,5 @@ test('columnGroup.headerCellClass is either nullish or a string', async () => {
4139

4240
await setup({ columns, rows: [] });
4341
await expect.element(headerCells.nth(0)).toHaveClass(cellClassname, { exact: true });
44-
await expect
45-
.element(headerCells.nth(1))
46-
.toHaveClass(`${cellClassname} my-header`, { exact: true });
42+
await expect.element(headerCells.nth(1)).toHaveClass(cellClassname, 'my-header', { exact: true });
4743
});

test/browser/column/summaryCellClass.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ test('summaryCellClass is a string', async () => {
3535
];
3636
await setup({ columns, topSummaryRows, bottomSummaryRows, rows: [] });
3737
for (const cell of cells.all()) {
38-
await expect.element(cell).toHaveClass(`${cellClassname} my-cell`, { exact: true });
38+
await expect.element(cell).toHaveClass(cellClassname, 'my-cell', { exact: true });
3939
}
4040
});
4141

@@ -48,10 +48,10 @@ test('summaryCellClass returns a string', async () => {
4848
}
4949
];
5050
await setup({ columns, topSummaryRows, bottomSummaryRows, rows: [] });
51-
await expect.element(cells.nth(0)).toHaveClass(`${cellClassname} my-cell-0`, { exact: true });
52-
await expect.element(cells.nth(1)).toHaveClass(`${cellClassname} my-cell-1`, { exact: true });
53-
await expect.element(cells.nth(2)).toHaveClass(`${cellClassname} my-cell-2`, { exact: true });
54-
await expect.element(cells.nth(3)).toHaveClass(`${cellClassname} my-cell-3`, { exact: true });
51+
await expect.element(cells.nth(0)).toHaveClass(cellClassname, 'my-cell-0', { exact: true });
52+
await expect.element(cells.nth(1)).toHaveClass(cellClassname, 'my-cell-1', { exact: true });
53+
await expect.element(cells.nth(2)).toHaveClass(cellClassname, 'my-cell-2', { exact: true });
54+
await expect.element(cells.nth(3)).toHaveClass(cellClassname, 'my-cell-3', { exact: true });
5555
});
5656

5757
test('summaryCellClass returns undefined', async () => {

test/browser/headerRowClass.test.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,5 @@ test('headerRowClass is a string', async () => {
2828
rows,
2929
headerRowClass: 'my-header-row'
3030
});
31-
await expect
32-
.element(headerRow)
33-
.toHaveClass(`${headerRowClassname} my-header-row`, { exact: true });
31+
await expect.element(headerRow).toHaveClass(headerRowClassname, 'my-header-row', { exact: true });
3432
});

test/browser/keyboardNavigation.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {
1313

1414
const activeCell = page.getActiveCell();
1515
const activeSelectAllCheckbox = activeCell.getSelectAllCheckbox();
16-
const activeSelectCheckbox = activeCell.getByRole('checkbox', { name: 'Select', exact: true });
16+
const activeSelectCheckbox = activeCell.getByRole('checkbox', { name: 'Select' });
1717

1818
type Row = undefined;
1919

test/browser/rowClass.test.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ test('rowClass is undefined', async () => {
1919
rows: initialRows,
2020
rowClass: undefined
2121
});
22-
await expect.element(rows.nth(0)).toHaveClass(`${rowClassname} rdg-row-even`, { exact: true });
23-
await expect.element(rows.nth(1)).toHaveClass(`${rowClassname} rdg-row-odd`, { exact: true });
24-
await expect.element(rows.nth(2)).toHaveClass(`${rowClassname} rdg-row-even`, { exact: true });
22+
await expect.element(rows.nth(0)).toHaveClass(rowClassname, 'rdg-row-even', { exact: true });
23+
await expect.element(rows.nth(1)).toHaveClass(rowClassname, 'rdg-row-odd', { exact: true });
24+
await expect.element(rows.nth(2)).toHaveClass(rowClassname, 'rdg-row-even', { exact: true });
2525
});
2626

2727
test('rowClass returns a string', async () => {
@@ -32,13 +32,13 @@ test('rowClass returns a string', async () => {
3232
});
3333
await expect
3434
.element(rows.nth(0))
35-
.toHaveClass(`${rowClassname} rdg-row-even my-row-0`, { exact: true });
35+
.toHaveClass(rowClassname, 'rdg-row-even my-row-0', { exact: true });
3636
await expect
3737
.element(rows.nth(1))
38-
.toHaveClass(`${rowClassname} rdg-row-odd my-row-1`, { exact: true });
38+
.toHaveClass(rowClassname, 'rdg-row-odd my-row-1', { exact: true });
3939
await expect
4040
.element(rows.nth(2))
41-
.toHaveClass(`${rowClassname} rdg-row-even my-row-2`, { exact: true });
41+
.toHaveClass(rowClassname, 'rdg-row-even my-row-2', { exact: true });
4242
});
4343

4444
test('rowClass returns undefined', async () => {
@@ -47,7 +47,7 @@ test('rowClass returns undefined', async () => {
4747
rows: initialRows,
4848
rowClass: () => undefined
4949
});
50-
await expect.element(rows.nth(0)).toHaveClass(`${rowClassname} rdg-row-even`, { exact: true });
51-
await expect.element(rows.nth(1)).toHaveClass(`${rowClassname} rdg-row-odd`, { exact: true });
52-
await expect.element(rows.nth(2)).toHaveClass(`${rowClassname} rdg-row-even`, { exact: true });
50+
await expect.element(rows.nth(0)).toHaveClass(rowClassname, 'rdg-row-even', { exact: true });
51+
await expect.element(rows.nth(1)).toHaveClass(rowClassname, 'rdg-row-odd', { exact: true });
52+
await expect.element(rows.nth(2)).toHaveClass(rowClassname, 'rdg-row-even', { exact: true });
5353
});

test/setupBrowser.ts

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,19 @@ locators.extend({
3434
},
3535

3636
getHeaderRow(opts?: LocatorByRoleOptions) {
37-
return this.getByRole('row', defaultToExactOpts(opts)).and(
38-
this.getBySelector('.rdg-header-row')
39-
);
37+
return this.getByRole('row', opts).and(this.getBySelector('.rdg-header-row'));
4038
},
4139

4240
getHeaderCell(opts?: LocatorByRoleOptions) {
43-
return this.getByRole('columnheader', defaultToExactOpts(opts));
41+
return this.getByRole('columnheader', opts);
4442
},
4543

4644
getRow(opts?: LocatorByRoleOptions) {
47-
return this.getByRole('row', defaultToExactOpts(opts)).and(this.getBySelector('.rdg-row'));
45+
return this.getByRole('row', opts).and(this.getBySelector('.rdg-row'));
4846
},
4947

5048
getCell(opts?: LocatorByRoleOptions) {
51-
return this.getByRole('gridcell', defaultToExactOpts(opts));
49+
return this.getByRole('gridcell', opts);
5250
},
5351

5452
getSelectAllCheckbox() {
@@ -68,19 +66,6 @@ locators.extend({
6866
}
6967
});
7068

71-
function defaultToExactOpts(
72-
opts: LocatorByRoleOptions | undefined
73-
): LocatorByRoleOptions | undefined {
74-
if (opts != null && opts.exact == null && typeof opts.name === 'string') {
75-
return {
76-
...opts,
77-
exact: true
78-
};
79-
}
80-
81-
return opts;
82-
}
83-
8469
beforeEach(async () => {
8570
// 1. reset cursor position to avoid hover issues
8671
// 2. force focus to be on the page

vite.config.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,9 @@ export default defineConfig(
123123
}
124124
}
125125
},
126+
locators: {
127+
exact: true
128+
},
126129
instances: [
127130
{
128131
browser: 'chromium',

0 commit comments

Comments
 (0)