@testing-library/dom#getAllByRole JavaScript Examples
The following examples show how to use
@testing-library/dom#getAllByRole.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: shared.js From emoji-picker-element with Apache License 2.0 | 6 votes |
export async function openSkintoneListbox (container) {
await waitFor(() => expect(getByRole(container, 'button', { name: /Choose a skin tone/ }))
.toBeVisible())
expect(queryAllByRole(container, 'listbox', { name: 'Skin tones' })).toHaveLength(0)
await fireEvent.click(getByRole(container, 'button', { name: /Choose a skin tone/ }))
await waitFor(() => expect(getByRole(container, 'listbox', { name: 'Skin tones' })).toBeVisible())
expect(getAllByRole(container, 'option')).toHaveLength(6)
getByRole(container, 'option', { name: 'Default', selected: true }).focus()
await waitFor(() => expect(getByRole(container, 'option', { name: 'Default', selected: true }))
.toBeVisible())
// JSDom doesn't fire transitionend events, so we do it manually here
// https://github.com/jsdom/jsdom/issues/1781#issuecomment-467935000
fireEvent(getByRole(container, 'listbox', { name: 'Skin tones' }), new Event('transitionend'))
}
Example #2
Source File: noResizeObserver.test.js From emoji-picker-element with Apache License 2.0 | 5 votes |
// TODO: we can remove these tests when/if we stop supporting browsers without ResizeObserver
// https://caniuse.com/resizeobserver
describe('ResizeObserver unsupported', () => {
let picker
let container
let oldResizeObserver
beforeEach(async () => {
basicBeforeEach()
oldResizeObserver = global.ResizeObserver
delete global.ResizeObserver
resetResizeObserverSupported()
picker = new Picker({ dataSource: ALL_EMOJI })
document.body.appendChild(picker)
container = picker.shadowRoot.querySelector('.picker')
await tick(40)
})
afterEach(async () => {
await tick(40)
document.body.removeChild(picker)
await tick(40)
await new Database({ dataSource: ALL_EMOJI }).delete()
await tick(40)
await basicAfterEach()
global.ResizeObserver = oldResizeObserver
resetResizeObserverSupported()
})
test('basic picker test', async () => {
const numInGroup1 = truncatedEmoji.filter(_ => _.group === 0).length
const numInGroup2 = truncatedEmoji.filter(_ => _.group === 1).length
await waitFor(() => expect(getByRole(container, 'button', { name: 'Choose a skin tone (currently Default)' })).toBeVisible())
expect(getAllByRole(container, 'tab')).toHaveLength(groups.length)
expect(getByRole(container, 'tab', { name: 'Smileys and emoticons', selected: true })).toBeVisible()
await waitFor(() => expect(
testingLibrary.getAllByRole(getByRole(container, 'tabpanel'), 'menuitem')).toHaveLength(numInGroup1)
)
expect(getByRole(container, 'tab', { name: 'People and body' })).toBeVisible()
fireEvent.click(getByRole(container, 'tab', { name: 'People and body' }))
await waitFor(() => expect(
testingLibrary.getAllByRole(getByRole(container, 'tabpanel'), 'menuitem')).toHaveLength(numInGroup2))
expect(getByRole(container, 'tab', { name: 'People and body', selected: true })).toBeVisible()
})
})
Example #3
Source File: custom.test.js From emoji-picker-element with Apache License 2.0 | 4 votes |
describe('Custom emojis tests', () => {
beforeEach(basicBeforeEach)
afterEach(basicAfterEach)
test('Setting custom emoji shows the proper first page', async () => {
const picker = new Picker({
locale: 'en',
dataSource: ALL_EMOJI
})
picker.customEmoji = [
{
name: 'monkey',
shortcodes: ['monkey'],
url: 'monkey.png'
}
]
document.body.appendChild(picker)
const container = picker.shadowRoot.querySelector('.picker')
await waitFor(() => expect(getAllByRole(container, 'tab')).toHaveLength(groups.length + 1))
// We actually have to sleep here, because we want to test for a race condition where the
// custom emoji show first, but then are replaced by the non-custom emoji
// https://github.com/nolanlawson/emoji-picker-element/issues/84
await tick(50)
await waitFor(() => expect(getByRole(container, 'menuitem', { name: 'monkey' })).toBeVisible())
await waitFor(async () => (
expect(
await Promise.all(getAllByRole(container, 'menu').map(node => getAccessibleName(container, node)))
).toStrictEqual([
'Custom',
'Favorites'
])
))
// Visibility test, has nothing to do with accessibility. We don't visually show the label if there's
// just one category and it's the default "Custom" one.
expect(container.querySelector('.category').textContent).toEqual('Custom')
expect(container.querySelector('.category')).toHaveClass('gone')
document.body.removeChild(picker)
await tick(20)
})
test('Setting custom emoji, selecting flags, unsetting custom emoji', async () => {
const picker = new Picker({
locale: 'en',
dataSource: ALL_EMOJI
})
picker.customEmoji = [
{
name: 'themonkey',
shortcodes: ['themonkey'],
url: 'themonkey.png'
}
]
document.body.appendChild(picker)
const container = picker.shadowRoot.querySelector('.picker')
await waitFor(() => expect(getAllByRole(container, 'tab')).toHaveLength(groups.length + 1))
await waitFor(() => expect(getByRole(container, 'menuitem', { name: 'themonkey' })).toBeVisible())
getByRole(container, 'tab', { name: 'Flags' }).click()
await waitFor(() => expect(getByRole(container, 'menuitem', { name: /?/ })).toBeVisible())
picker.customEmoji = undefined
await waitFor(() => expect(getAllByRole(container, 'tab')).toHaveLength(groups.length))
await waitFor(() => expect(getByRole(container, 'menuitem', { name: /?/ })).toBeVisible())
expect(getByRole(container, 'tab', { name: 'Flags' }).getAttribute('aria-selected')).toEqual('true')
document.body.removeChild(picker)
await tick(20)
})
test('Setting custom emoji, unsetting custom emoji', async () => {
const picker = new Picker({
locale: 'en',
dataSource: ALL_EMOJI
})
picker.customEmoji = [
{
name: 'themonkey',
shortcodes: ['themonkey'],
url: 'themonkey.png'
}
]
document.body.appendChild(picker)
const container = picker.shadowRoot.querySelector('.picker')
await waitFor(() => expect(getAllByRole(container, 'tab')).toHaveLength(groups.length + 1))
await waitFor(() => expect(getByRole(container, 'menuitem', { name: 'themonkey' })).toBeVisible())
picker.customEmoji = undefined
await waitFor(() => expect(getAllByRole(container, 'tab')).toHaveLength(groups.length))
await waitFor(() => expect(getByRole(container, 'menuitem', { name: /?/ })).toBeVisible())
expect(getByRole(container, 'tab', { name: 'Smileys and emoticons' }).getAttribute('aria-selected')).toEqual('true')
document.body.removeChild(picker)
await tick(20)
})
})
Example #4
Source File: element.test.js From emoji-picker-element with Apache License 2.0 | 4 votes |
describe('element tests', () => {
describe('UI tests', () => {
let picker
let container
beforeEach(async () => {
basicBeforeEach()
mockFrenchDataSource()
picker = new Picker({ dataSource: ALL_EMOJI, locale: 'en' })
container = picker.shadowRoot
document.body.appendChild(picker)
await tick(20)
})
afterEach(async () => {
document.body.removeChild(picker)
await tick(20)
await new Database({ dataSource: FR_EMOJI, locale: 'fr' }).delete()
await new Database({ dataSource: ALL_EMOJI, locale: 'en' }).delete()
await tick(20)
await basicAfterEach()
})
test('changing locale/dataSource prop causes only one network request', async () => {
expect(fetch).toHaveBeenCalledTimes(1)
expect(fetch).toHaveBeenLastCalledWith(ALL_EMOJI, undefined)
await type(getByRole(container, 'combobox'), 'monkey face')
await waitFor(() => expect(getAllByRole(container, 'option')).toHaveLength(1), {
timeout: 2000
})
expect(getByRole(container, 'option', { name: /?/ })).toBeVisible()
picker.locale = 'fr'
picker.dataSource = FR_EMOJI
await tick(20)
expect(fetch).toHaveBeenCalledTimes(2)
expect(fetch).toHaveBeenLastCalledWith(FR_EMOJI, undefined)
await clear(getByRole(container, 'combobox'))
await type(getByRole(container, 'combobox'), 'singe tête')
await waitFor(() => expect(getAllByRole(container, 'option')).toHaveLength(1))
expect(getByRole(container, 'option', { name: /?/ })).toBeVisible()
})
test('changing locale/dataSource attr causes only one network request', async () => {
expect(fetch).toHaveBeenCalledTimes(1)
expect(fetch).toHaveBeenLastCalledWith(ALL_EMOJI, undefined)
await type(getByRole(container, 'combobox'), 'monkey face')
await waitFor(() => expect(getAllByRole(container, 'option')).toHaveLength(1), {
timeout: 2000
})
expect(getByRole(container, 'option', { name: /?/ })).toBeVisible()
picker.setAttribute('locale', 'fr')
picker.setAttribute('data-source', FR_EMOJI)
await tick(20)
expect(fetch).toHaveBeenCalledTimes(2)
expect(fetch).toHaveBeenLastCalledWith(FR_EMOJI, undefined)
await clear(getByRole(container, 'combobox'))
await type(getByRole(container, 'combobox'), 'singe tête')
await waitFor(() => expect(getAllByRole(container, 'option')).toHaveLength(1))
expect(getByRole(container, 'option', { name: /?/ })).toBeVisible()
})
test('can dynamically change i18n', async () => {
picker.i18n = frI18n
await tick(10)
expect(getByRole(container, 'combobox', { name: 'Recherche' })).toBeVisible()
expect(getByRole(container, 'tab', { name: 'Sourires et emoticons' })).toBeVisible()
expect(getByRole(container, 'button', { name: 'Choose a skin tone (currently Défaut)' })).toBeVisible()
})
test('can change default skin tone emoji', async () => {
expect(picker.skinToneEmoji).toBe(DEFAULT_SKIN_TONE_EMOJI)
expect(getByRole(container, 'button', { name: /Choose a skin tone/ }).innerHTML)
.toContain(DEFAULT_SKIN_TONE_EMOJI)
picker.skinToneEmoji = '?'
await waitFor(() => expect(getByRole(container, 'button', { name: /Choose a skin tone/ }).innerHTML).toContain('?'))
picker.skinToneEmoji = '?'
await waitFor(() => expect(getByRole(container, 'button', { name: /Choose a skin tone/ }).innerHTML).toContain('?'))
})
test('can get the locale/dataSource', () => {
expect(picker.locale).toBe('en')
expect(picker.dataSource).toBe(ALL_EMOJI)
})
})
describe('defaults test', () => {
beforeEach(() => {
fetch.get(DEFAULT_DATA_SOURCE, () => new Response(JSON.stringify(truncatedEmoji), { headers: { ETag: 'W/aaa' } }))
fetch.head(DEFAULT_DATA_SOURCE, () => new Response(null, { headers: { ETag: 'W/aaa' } }))
})
afterEach(basicAfterEach)
test('has a default locale/dataSource', async () => {
const picker = new Picker()
document.body.appendChild(picker)
const container = picker.shadowRoot
await tick(20)
await waitFor(() => expect(getByRole(container, 'menuitem', { name: /?/ })).toBeVisible())
await new Database().delete()
await tick(20)
await document.body.removeChild(picker)
await tick(20)
})
})
})
Example #5
Source File: favorites.test.js From emoji-picker-element with Apache License 2.0 | 4 votes |
describe('Favorites UI', () => {
let picker
let container
beforeEach(async () => {
basicBeforeEach()
const dataWithFavorites = uniqBy([
...truncatedEmoji,
...allData.filter(_ => MOST_COMMONLY_USED_EMOJI.includes(_.emoji))
], _ => _.emoji)
fetch.get(dataSource, () => new Response(JSON.stringify(dataWithFavorites), { headers: { ETag: 'W/favs' } }))
fetch.head(dataSource, () => new Response(null, { headers: { ETag: 'W/favs' } }))
picker = new Picker({ dataSource, locale: 'en' })
document.body.appendChild(picker)
container = picker.shadowRoot.querySelector('.picker')
await tick(40)
})
afterEach(async () => {
await tick(40)
document.body.removeChild(picker)
await tick(40)
await basicAfterEach()
})
async function remount () {
await tick(40)
document.body.removeChild(picker)
await tick(40)
document.body.appendChild(picker)
container = picker.shadowRoot
await tick(40)
}
test('Favorites UI basic test', async () => {
let favoritesBar = getByRole(container, 'menu', { name: 'Favorites' })
expect(favoritesBar).toBeVisible()
await waitFor(() => expect(getAllByRole(favoritesBar, 'menuitem')).toHaveLength(8))
expect(getAllByRole(favoritesBar, 'menuitem').map(_ => _.getAttribute('id').substring(4))).toStrictEqual(
MOST_COMMONLY_USED_EMOJI.slice(0, 8)
)
await waitFor(() => expect(getByRole(container, 'menuitem', { name: /?/ })).toBeVisible())
fireEvent.click(getByRole(container, 'menuitem', { name: /?/ }))
// have to unmount/remount to force a favorites refresh
await remount()
favoritesBar = getByRole(container, 'menu', { name: 'Favorites' })
await waitFor(() => expect(getAllByRole(favoritesBar, 'menuitem')
.map(_ => _.getAttribute('id').substring(4))).toStrictEqual([
'?',
...MOST_COMMONLY_USED_EMOJI.slice(0, 7)
]
))
})
test('Favorites with custom emoji', async () => {
const transparent = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'
const black = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs='
const customEmoji = [
{
name: 'transparent',
shortcodes: ['transparent'],
url: transparent
},
{
name: 'black',
shortcodes: ['black'],
url: black
}
]
await waitFor(() => expect(getAllByRole(container, 'tab')).toHaveLength(groups.length))
// when setting custom emoji, they can appear in the favorites
await tick(40)
picker.customEmoji = customEmoji
await tick(40)
await waitFor(() => expect(getAllByRole(container, 'tab')).toHaveLength(groups.length + 1))
expect(getByRole(container, 'tab', { name: 'Custom', selected: true })).toBeVisible()
await tick(40)
await waitFor(() => expect(queryAllByRole(container, 'menuitem', { name: /transparent/i })).toHaveLength(1), {
timeout: 5000
})
await waitFor(() => expect(getByRole(container, 'menuitem', { name: /transparent/i })).toBeVisible(), {
timeout: 3000
})
fireEvent.click(getByRole(container, 'menuitem', { name: /transparent/i }))
fireEvent.click(getByRole(container, 'menuitem', { name: /black/i }))
// have to unmount/remount to force a favorites refresh
await remount()
await waitFor(
() => expect(getByRole(getByRole(container, 'menu', { name: 'Favorites' }), 'menuitem', { name: /transparent/i })).toBeVisible
)
await waitFor(
() => expect(getByRole(getByRole(container, 'menu', { name: 'Favorites' }), 'menuitem', { name: /black/i })).toBeVisible
)
// when setting custom emoji back to [], the favorites bar removes the custom emoji
picker.customEmoji = []
await waitFor(() => expect(getAllByRole(container, 'tab')).toHaveLength(groups.length))
await waitFor(
() => expect(queryAllByRole(getByRole(container, 'menu', { name: 'Favorites' }), 'menuitem', { name: /transparent/i })).toHaveLength(0)
)
await waitFor(
() => expect(queryAllByRole(getByRole(container, 'menu', { name: 'Favorites' }), 'menuitem', { name: /black/i })).toHaveLength(0)
)
})
})
Example #6
Source File: scrolling.test.js From emoji-picker-element with Apache License 2.0 | 4 votes |
describe('scrolling', () => {
beforeEach(basicBeforeEach)
afterEach(basicAfterEach)
test('can scroll', async () => {
const picker = new Picker()
const container = picker.shadowRoot
document.body.appendChild(picker)
await waitFor(() => expect(getByRole(container, 'menuitem', { name: /?/ })).toBeVisible())
const tabPanel = getByRole(container, 'tabpanel')
await tick(20)
expect(tabPanel.scrollTop).toEqual(0)
tabPanel.scrollTop = 1
await tick(20)
expect(tabPanel.scrollTop).toEqual(1)
document.body.removeChild(picker)
await tick(20)
})
test('scrollTop resets to 0 on changing tabs', async () => {
const picker = new Picker()
const container = picker.shadowRoot
document.body.appendChild(picker)
await waitFor(() => expect(getByRole(container, 'menuitem', { name: /?/ })).toBeVisible())
await tick(100)
const tabPanel = getByRole(container, 'tabpanel')
tabPanel.scrollTop = 1
await tick(100)
expect(tabPanel.scrollTop).toEqual(1)
await userEvent.click(getByRole(container, 'tab', { name: 'People and body' }))
await tick(20)
expect(tabPanel.scrollTop).toEqual(0)
await userEvent.click(getByRole(container, 'tab', { name: 'Smileys and emoticons' }))
await tick(20)
expect(tabPanel.scrollTop).toEqual(0)
document.body.removeChild(picker)
await tick(20)
})
test('scrollTop resets to 0 on changing search input', async () => {
const picker = new Picker()
const container = picker.shadowRoot
document.body.appendChild(picker)
await waitFor(() => expect(getByRole(container, 'menuitem', { name: /?/ })).toBeVisible())
const tabPanel = getByRole(container, 'tabpanel')
await userEvent.type(getByRole(container, 'combobox'), 'monkey')
await waitFor(() => expect(getAllByRole(container, 'option')).toHaveLength(2))
expect(getByRole(container, 'option', { name: /?/ })).toBeVisible()
await tick(100)
tabPanel.scrollTop = 1
await tick(100)
expect(tabPanel.scrollTop).toEqual(1)
await userEvent.type(getByRole(container, 'combobox'), ' face')
await waitFor(() => expect(getAllByRole(container, 'option')).toHaveLength(1))
expect(getByRole(container, 'option', { name: /?/ })).toBeVisible()
await tick(40)
expect(tabPanel.scrollTop).toEqual(0)
document.body.removeChild(picker)
await tick(20)
})
})