testing-library - 使用测试库选择下拉元素

标签 testing-library

显然我根本不了解测试库。它们具有“单击”功能,但似乎没有从选择元素中选择简单下拉选项的功能。这是失败的,表示选择了 0,而不是预期的 1。如何使选择生效?


import React from "react";
import {render} from '@testing-library/react'
import {screen} from '@testing-library/dom'

let container: any;
beforeEach(() => {
    container = document.createElement('div');
    document.body.appendChild(container);
});

afterEach(() => {
    document.body.removeChild(container);
    container.remove();
    container = null;
});

it('AddRental should display', () => {
    render(<select name="town" data-testid="town" className="form-control"
                   aria-label="Select the Town">
        <option value="0">--Town--</option>
        <option value="1">My town</option>
        <option value="2">Your Town</option>
        <option value="3">The other town</option>
    </select>, {container});
    const dropdown = screen.getByTestId('town');
    expect(dropdown.value)
        .toBe('0');
    dropdown.click();
    const athabascaOption = screen.getByText('My town');
    athabascaOption.click();
    const byTestId = screen.getByTestId('town');
    expect(byTestId.value)
        .toBe('1')
});

最佳答案

您可以使用 fireEvent以此目的。它可以从 @testing-library/react 导入(顺便说一下,为方便起见,screen 也可以):

import {render, screen, fireEvent} from '@testing-library/react'

这是为使用此功能而重写的测试用例:

render(
    <select
        name="town"
        data-testid="town"
        className="form-control"
        aria-label="Select the Town"
    >
        <option value="0">--Town--</option>
        <option value="1">My town</option>
        <option value="2">Your Town</option>
        <option value="3">The other town</option>
    </select>,
    { container },
);
const dropdown = screen.getByTestId('town') as HTMLSelectElement;
expect(dropdown.value).to.equal('0');
fireEvent.change(dropdown, { target: { value: '1' } });
expect(dropdown.value).to.equal('1');

为了进一步解释,在 this GitHub issue 中有一些有用的讨论。和 this CodeSandbox from a comment on the issue .

关于testing-library - 使用测试库选择下拉元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61475223/

相关文章:

javascript - ReactJS : Failed to load plugin 'testing-library' declared in 'package.json : Cannot find module ' ./eslint-utils'

javascript - 如何使用 Cypress 和 @testing-library/cypress 测试复选框切换,

javascript - 如何使用 react native 测试库查询具有特定文本的按钮

reactjs - @测试库/ react : Clicking outside of component not working

javascript - 当状态更新不影响 UI 时防止 "not wrapped in act(...)"Jest 警告

angular - 如何使用 Testing-Library、Jest 和 JSDOM 测试自定义元素/Web 组件?

javascript - 使用 getByDisplayValue Text 在 react 测试库中找不到按钮

javascript - 类型错误 : Select is not a constructor when using Svelte and jest

javascript - 使用第三方React UI库时找不到模块 'react' - Vite + Preact

javascript - 使用测试库在JS中模拟长按鼠标左键