reactjs - React Jest 测试 : TestingLibraryElementError: Unable to find an element

标签 reactjs jestjs testing-library

我无法在我的 Jest 测试中获取测试 ID。我是 react 测试的新手。我想测试这个组件并取回之前给出的 h3 文本。

告诉我:
“TestingLibraryElementError:无法通过以下方式找到元素:[data-testid="testH3"]”

你能帮帮我吗?

// Component
import React from 'react';
import './Card.scss'; 
import Card from '@material-ui/core/Card';
import { Link } from "react-router-dom";

function MovieCard({title, image}) {
    return (
        <div className="card__container">
            <Link to={"/details/" + title}>
                <Card className="card">
                    <img src={image} alt=""/>
                    <div className="card__info">
                        <h3 
                            data-testid="testH3"
                            className="card__title">{ title }
                        </h3>
                    </div>
                </Card>            
            </Link>
        </div>
    )
}

export default MovieCard

// test
import React from 'react';
import { render, screen, cleanup } from '@testing-library/react';
import MovieCard from '../MovieCard';
import { BrowserRouter as Router } from "react-router-dom";

afterEach(cleanup);

describe('Test MovieCard', () => {
  const tree = render(
    <Router>
      <MovieCard title="Batman" image="imagesrc"/>
    </Router>
  )

  it('should match with snapshot', () => {
    screen.debug();
    expect(tree).toMatchSnapshot();
   });

   it('test h3', () => {
     const {getByTestId} = tree;
     const element = screen.getByTestId('testH3')
    });
  });

更新:

最终代码现在运行良好。谢谢大家

import React from 'react';
import { render, screen, cleanup } from '@testing-library/react';
import MovieCard from '../MovieCard';
import { BrowserRouter as Router } from "react-router-dom";

afterEach(cleanup);

describe('Test MovieCard', () => {
  function tree() {
    return render(
      <Router>
        <MovieCard title="Batman" image="imagesrc"/>
      </Router>
    )
  }

  it('should match with snapshot', () => {
    expect(tree()).toMatchSnapshot();
   });

   it('test h3 text is Batman', () => {
     const {getByTestId} = tree();
     const element = screen.getByTestId('testH3')
     expect(element.textContent).toEqual("Batman")
     screen.debug();
    });
  });

最佳答案

使用 function 而不是 const

describe('Test MovieCard', () => {
  function tree() {
    return render(
      <Router>
        <MovieCard title="Batman" image="imagesrc"/>
      </Router>
    )
  }

  it('should match with snapshot', () => {
    screen.debug();
    expect(tree()).toMatchSnapshot();
   });

   it('test h3', () => {
     const {getByTestId} = tree();
     const element = screen.getByTestId('testH3')
    });
  });

关于reactjs - React Jest 测试 : TestingLibraryElementError: Unable to find an element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67653566/

相关文章:

vue.js - Vue 测试库,子组件接收 props

javascript - 这是将名称搜索到 JavaScript 数组中的正确方法吗?

node.js - 如何在 React App 中使用 Active Directory 实现 SSO 身份验证?

reactjs - Material UI + enzyme 测组件

node.js - 无法测试 mongo 聚合 MongoError : Unrecognized pipeline stage name: '$set'

javascript - testing-library/react 如何在动态生成错误消息时测试无效输入

jestjs - :click event 上的 Svelte 单元测试

javascript - 尽管有唯一键,但每次更改数据数组时都会重新呈现所有列表元素

javascript - 输入表单-改变onChange和isDisabled的运行顺序

javascript - 有没有办法正确模拟单元测试的重新选择选择器?