javascript - 如何在 Enzyme React 中模拟按钮单击?

标签 javascript reactjs jestjs enzyme

模拟按钮单击似乎是一个非常简单/标准的操作。但是,我无法让它在 reacyt Jest.js 测试中工作。

下面是我尝试过的,错误消息是什么以及我想测试的代码

我想测试的代码

class Home extends React.Component {

  constructor(props) {
    super(props)

    this.state = { 
      showAssessment: false
    };
  }
  assessment = (boolean) => {
    this.setState({
      showAssessment: boolean
    })
  }

  render() {
    if (this.state.showAssessment === true) {
      return <App
          assessment = {
            this.assessment
          }
      />
    } else {
      return ( < div className='container-fluid' style={landingPage}>
        <
            Component1 / >
        <
          button className='btn btn-dark' style={matchToolButton} onClick = {
          () => this.assessment(true)
        } >  Match Tool < /button> < /
            div > )
          }
          }

          }

我编写的测试:

import React from 'react';

import { shallow, mount, render } from 'enzyme';

import Home from './Home';


test ('Home Button', () => {
    it ('It calls assessment function when clicked', () => {


        const wrapper = mount(<Home/>); // rednoing the home componenet/ testing
         wrapper.instance().assessment = jest.fn(); //if this isn't working try wrapper.instance().assessment

        wrapper.find('button').simulate('click');
        expect(wrapper.assessment).toHaveBeenCalled();// see comment on line 14 keep the same

    });

    });


我收到的错误消息


FAIL  src/Home.test.js
  ● Test suite failed to run

    /Users/mbyousaf/Desktop/Bucket/dsp_poc2_uwe/front-end/src/Home.test.js: Unexpected token (12:30)
        10 | 
        11 | 
      > 12 |         const wrapper = mount(<Home/>); // rednoing the home componenet/ testing
           |                               ^
        13 |          wrapper.instance().assessment = jest.fn(); //if this isn't working try wrapper.instance().assessment
        14 | 
        15 |         wrapper.find('button').simulate('click');

最佳答案

首先你的测试中有 test(... it(... 。它无法运行。它应该是描述(... it(...

其次,React 测试库使您想要实现的目标变得非常容易(取代 enzyme ):

react-testing-library

import { render, fireEvent } from "@testing-library/react";

describe('Home Button', () => {
  it ('It calls assessment function when clicked', () => {
    const { getByText } = render(<Home/>);
    fireEvent.click(getByText("Match Tool"));
    // test now whatever should be differnt after the button is clicked
    ...

关于javascript - 如何在 Enzyme React 中模拟按钮单击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57553857/

相关文章:

javascript - 当 pub.dev 插件没有 web 支持时,使用 npm packages for flutter web

javascript - 当 redux 的 props 更新后,React 组件应该如何重新渲染自身?

javascript - 如何滚动到 react 中动态添加的元素

reactjs - 如何在每个测试的基础上设置平台以进行 Jest 测试?

javascript - 为 CSS 元素分配一个类

javascript - 提交前禁用空文本字段

javascript - 如何连接到数组中的 'indexed' 对象

typescript - 类型错误 : Cannot read property 'viewManagersNames' of undefined - Integrating Jest and Enzyme with React Native TypeScript Package

reactjs - 测试从本地 JSON 文件中获取一些数据的异步操作创建器

javascript - PHP : How to get value from DB to already created textbox