假设我有以下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,但它似乎是在模拟整个导入的类,我不确定它如何应用于单个常量。
1 回答
月关宝盒
TA贡献1772条经验 获得超5个赞
对常量使用实例属性被认为是一种不好的做法;这就是静态属性的用途。这可以像Input.MAX_LENGTH = ...安装组件之前一样模拟:
class Input extends React.Component {
static MAX_LENGTH = 1024;
...
}
中需要恢复原值afterEach。
或者至少使它成为只读原型属性。这可以像jest.spyOn(Input, 'MAX_LENGTH', 'get').mockReturnValue(...)安装组件之前一样模拟:
class Input extends React.Component {
get MAX_LENGTH() { return 1024 };
...
}
没有它,它需要在初始渲染后在组件实例上进行模拟:
const wrapper = mount(<Input value={'foo'} />)
wrapper.instance().MAX_LENGTH = ...;
wrapper.setProps({});
...
添加回答
举报
0/150
提交
取消