Skip to content

toHaveSelectionValue #289

Closed
Closed
@diegohaz

Description

@diegohaz

Describe the feature you'd like:

I'm testing a combobox element with a behavior that is quite similar to the address bar in the browser. That is, when you start typing, it automatically completes the text with the first suggestion and highlights the completion string.

I would like to test this selection behavior.

Suggested implementation:

function toHaveSelectionValue(element, value) {
  const { selectionStart, selectionEnd } = element;
  const selectionValue = element.value.slice(selectionStart, selectionEnd);
  return {
    pass: selectionValue === value,
    ...
  };
}

Describe alternatives you've considered:

I can check the selectionStart and selectionEnd properties on the HTMLInputElement, but this is not as easy to read. And I also have to explicitly cast the element if I'm using TypeScript.

const input = getByLabelText("Fruits") as HTMLInputElement;
// Expect "pple" to be selected in "Apple"
expect(input.selectionStart).toBe(1);
expect(input.selectionEnd).toBe(5);

So, for now, I'm using an expectSelectionValue util function in my app.

Teachability, Documentation, Adoption, Migration Strategy:

toHaveSelectionValue

toHaveSelectionValue(value: string)

This allows you to check whether the given textbox element has the specified selected (highlighted) value. It accepts <input type="text"> and <textarea> elements.

Examples

<input type="text" value="text" data-testid="input" />
Using DOM Testing Library
const input = getByTestId('input')

input.setSelectionRange(1, 3)

expect(input).toHaveSelectionValue('ex')

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions