在 Jest 中模拟类常量

假设我有以下this.MAX_LENGTH在构造函数中设置常量的组件。


import PropTypes from 'prop-types';

import React from 'react';


class Input extends React.Component {

  static propTypes = {

    value: PropTypes.string.isRequired

  };


  constructor(props) {

    super(props);


    // An example constant

    this.MAX_LENGTH = 1024;

  }


  render() {

    

    return (

      <label htmlFor="comment_body">

        <textarea

          className="comment-reply input-highlight-on-focus"

          type="input"

          name="comment[body]"

          id="comment_body"

          maxLength={this.MAX_LENGTH}

          value={this.props.value} />

      </label>

    )

  }


}


export default Input;


该MAX_LENGTH常量用于设置的最大长度textarea。


在我的 Jest 规范中,我想模拟 的值this.MAX_LENGTH,但我不确定如何设置该模拟。


这是我的 Jest 测试的外观(它使用chai并enzyme作为测试助手):


it('renders the textarea', () => {

  // Mock the constant here to set a custom value of 99

  // ????


  const wrapper = mount(<Input value={'foo'} />)

  const textarea = wrapper.find('.comment-reply').first();


  expect(textarea).to.have.attr('maxLength', '99');

});


我可以????用模拟常量的值来代替什么?


我尝试阅读Jest 文档中的ES6 Class Mocks,但它似乎是在模拟整个导入的类,我不确定它如何应用于单个常量。


慕桂英3389331
浏览 94回答 1
1回答

月关宝盒

对常量使用实例属性被认为是一种不好的做法;这就是静态属性的用途。这可以像Input.MAX_LENGTH = ...安装组件之前一样模拟:class Input extends React.Component {&nbsp; static MAX_LENGTH = 1024;&nbsp; ...}中需要恢复原值afterEach。或者至少使它成为只读原型属性。这可以像jest.spyOn(Input, 'MAX_LENGTH', 'get').mockReturnValue(...)安装组件之前一样模拟:class Input extends React.Component {&nbsp; get MAX_LENGTH() { return 1024 };&nbsp; ...}没有它,它需要在初始渲染后在组件实例上进行模拟:const wrapper = mount(<Input value={'foo'} />)wrapper.instance().MAX_LENGTH = ...;wrapper.setProps({});...
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript