React 测试 - 获取元素内的文本

React Testing - get text inside an element

我正在为我的应用编写几个测试。我想看看节省时间后,它进入列表。

现在我通过从屏幕上找到一个文本来让这个测试工作,但我想通过 id 来指定它。我的意思是检查这个 00:01:00 是否真的在正确的位置,而不仅仅是页面上的某个地方。希望大家明白我的意思。

我该怎么做?

这是通过从屏幕上查找来工作的:

test("Time saved", async () => {
  render(<SecondTimer />);

  const start = screen.getByText("START");
  fireEvent.click(start);

  await waitFor(() => screen.getByText(/00:01:00/i), {
    timeout: 2000
  });

  const pause = screen.getByText("PAUSE");
  fireEvent.click(pause); 

  const saveTime = screen.getByText("SAVE TIME"); 
  fireEvent.click(saveTime); 

  const history = screen.queryByText(/00:01:00/i);

  screen.debug(); // printtaa renderinnin consoliin
});

我有 DIV 这样的:

<div data-testid={'aikalista'} className={'tulostaulu'}>
            <ul>
              {this.state.aikoja === false && ('No times my friend!')}
              {this.state.aikoja === true && (<div>{this.state.history.map((item, index) => <li key={index}>{item}</li>)}</div>)}
            </ul>

这是我尝试过的不同变体,但没有成功。

test("Time saved v2", async () => {
  render(<SecondTimer />);

  const start = screen.getByText("START");
  fireEvent.click(start);

  await waitFor(() => screen.getByText(/00:01:00/i), {
    timeout: 2000
  });

  const pause = screen.getByText("PAUSE");
  fireEvent.click(pause); 

  const saveTime = screen.getByText("SAVE TIME"); 
  fireEvent.click(saveTime); 

  const aikalista = screen.getByTestId('aikalista');
  expect(getByTestId('aikalista').textContent).toEqual(/00:01:00/i)



  screen.debug(); // printtaa renderinnin consoliin
});

getByText 有这个签名。

getByText(
  container: HTMLElement, // if you're using `screen`, then skip this argument
  text: TextMatch,
  options?: {
    selector?: string = '*',
    exact?: boolean = true,
    ignore?: string|boolean = 'script, style',
    normalizer?: NormalizerFn,
  }): HTMLElement

您可以在选项对象中使用 select 或 属性 到 select 元素。所以你可以这样写。

screen.getByText(/00:01:00/i, {selector: "#someId"})

您也可以在通过文本获取元素后检查元素是否具有您想要的id。

const element = screen.getByText(/00:01:00/i);
expect(element).toHaveAttribute('id', "someId");