Skip to content

Commit ceeaaa8

Browse files
committed
fix: don't suggest query that would result in different element
1 parent bec190b commit ceeaaa8

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

src/__tests__/suggestions.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,18 @@ test('respects ignores', () => {
3535
).not.toThrowError()
3636
})
3737

38+
test('does not suggest query that would give a different element', () => {
39+
renderIntoDocument(`
40+
<div data-testid="foo"><img src="foo" /></div>
41+
<div data-testid="bar"><a href="/foo"><div role="figure"><img src="foo" /></div></a></div>
42+
<a data-testid="baz"><h1>link text</h1></a>
43+
`)
44+
45+
expect(() => screen.getByTestId('foo')).not.toThrowError()
46+
expect(() => screen.getByTestId('bar')).not.toThrowError()
47+
expect(() => screen.getByTestId('baz')).not.toThrowError()
48+
})
49+
3850
test('does not suggest when using getByRole', () => {
3951
renderIntoDocument(`<button data-testid="foo">submit</button>`)
4052

@@ -57,6 +69,12 @@ test(`should not suggest if the suggestion would give different results`, () =>
5769
).not.toThrowError()
5870
})
5971

72+
test('should suggest by label over title', () => {
73+
renderIntoDocument(`<label><span>bar</span><input title="foo" /></label>`)
74+
75+
expect(() => screen.getByTitle('foo')).toThrowError(/getByLabelText\("bar"\)/)
76+
})
77+
6078
test('should not suggest if there would be mixed suggestions', () => {
6179
renderIntoDocument(`
6280
<button data-testid="foo">submit</button>

src/suggestions.js

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import {computeAccessibleName} from 'dom-accessibility-api'
2-
import {getRoles} from './role-helpers'
32
import {getDefaultNormalizer} from './matches'
43
import {getNodeText} from './get-node-text'
54
import {DEFAULT_IGNORE_TAGS} from './config'
5+
import {getImplicitAriaRoles} from './role-helpers'
66

77
const normalize = getDefaultNormalizer()
88

@@ -38,11 +38,9 @@ function makeSuggestion(queryName, content, {variant, name}) {
3838
}
3939

4040
export function getSuggestedQuery(element, variant) {
41-
const roles = getRoles(element)
42-
43-
const roleNames = Object.keys(roles)
44-
if (roleNames.length) {
45-
const [role] = roleNames
41+
const role =
42+
element.getAttribute('role') ?? getImplicitAriaRoles(element)?.[0]
43+
if (role) {
4644
return makeSuggestion('Role', role, {
4745
variant,
4846
name: computeAccessibleName(element),

0 commit comments

Comments
 (0)