簡體   English   中英

Jest spyOn 不是函數

[英]Jest spyOn is not a function

我正在使用 Jest 來測試我的 React 組件,但我遇到了一個我以前從未見過的錯誤。

這是我的<Row/>組件:

class Row extends React.Component {

  constructor() {
    super();
    this.state = { userId: '', showDetails: false, showModal: false, status: '', value: '' }
    this.handleStatusChange = this.handleStatusChange.bind(this)
    this.handleModalCancel = this.handleModalCancel.bind(this)
    this.handleModalConfirm = this.handleModalConfirm.bind(this)
    this.showDetailsPanel = this.showDetailsPanel.bind(this)
  }

  showDetailsPanel() {

    if(!this.state.showDetails) {
      this.setState({
        showDetails: true
      });
    } else {
      this.setState({
        showDetails: false
      });
    }
  }

  handleModalCancel() {
    this.setState({
      showModal: false
    });
  }

  handleStatusChange(e) {
    this.setState({
      showModal: true,
      value: e.target.value,
    });
  }

  handleModalConfirm() {
    this.setState({
      showModal: false
    });
    this.props.model.status = this.state.value;
  }

  componentWillMount() {
    this.props.model.fullName = `${this.props.model.firstName} ${this.props.model.lastName}`
  }

  render() {

    const { model, modelProps, actions } = this.props;

    return (
      <div className="c-table__row">
        {this.state.showModal ?
           <Modal
             title="Are you sure?"
             copy={`Are you sure that you want to change the staus of this user to ${this.state.value}?`}
             confirmText="Yes I'm sure"
             cancel={this.handleModalCancel}
             submit={this.handleModalConfirm}
           />
           : null
        }
        <div className="c-table__row-wrapper">
        {modelProps.map((p, i) =>
          <div className={`c-table__item ${model[p] === "Active" || model[p] === "Suspended" || model[p] === "Locked" ? model[p] : ""}`} key={i}>
            {model[p]}
          </div>
        )}
        <div className="c-table__item c-table__item-sm">
          <a onClick={this.showDetailsPanel} className={this.state.showDetails ? "info showing" : "info"}><Icon yicon="Expand_Cross_30_by_30" /></a>
        </div>
      </div>

      {this.state.showDetails ?
        <Details
          tel={model.telephoneNumber}
          dept={model.department}
          role={model.role}
          username={model.username}
          status={model.status}
          statusToggle={this.handleStatusChange}
        />
      : null }
      </div>
    );
  }
}

export default Row;

這是我的測試:

import React from 'react';
import {shallow, mount} from 'enzyme';
import { shallowToJson } from 'enzyme-to-json'
import renderer from 'react-test-renderer';
import Row from '../../../src/components/tables/row.jsx';


test('clicking the info button should call showDetailsPanel', () => {

  const component = mount(<Row model={{a: 1, b: 2}} modelProps={['a', 'b']}/>)
  const showDetailsPanel = jest.spyOn(component.instance(), 'showDetailsPanel');
  component.update();
  const button = component.find('.info')

  button.simulate('click')
  expect(showDetailsPanel).toBeCalled();

})

所以我只是想檢查一下當單擊info按鈕時是否調用了 showDetailsPanel,但它失敗了TypeError: jest.spyOn is not a function
我正在使用"jest": "^18.1.0","jest-cli": "^18.1.0","jest-junit": "^1.5.1"

任何的想法?

提前致謝

您正在使用 Jest 版本18.1.0jest.spyOn已添加到19.0.0

如果要使用它,則需要升級Jest。

npm install --save-dev jest@latest

或者,如果您使用的是Yarn

yarn upgrade jest --latest

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM