慕桂英3389331
2022-11-11 14:19:15
假設(shè)我有以下this.MAX_LENGTH在構(gòu)造函數(shù)中設(shè)置常量的組件。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常量用于設(shè)置的最大長(zhǎng)度textarea。在我的 Jest 規(guī)范中,我想模擬 的值this.MAX_LENGTH,但我不確定如何設(shè)置該模擬。這是我的 Jest 測(cè)試的外觀(它使用chai并enzyme作為測(cè)試助手):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');});我可以????用模擬常量的值來(lái)代替什么?我嘗試閱讀Jest 文檔中的ES6 Class Mocks,但它似乎是在模擬整個(gè)導(dǎo)入的類(lèi),我不確定它如何應(yīng)用于單個(gè)常量。
1 回答

月關(guān)寶盒
TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊
對(duì)常量使用實(shí)例屬性被認(rèn)為是一種不好的做法;這就是靜態(tài)屬性的用途。這可以像Input.MAX_LENGTH = ...安裝組件之前一樣模擬:
class Input extends React.Component {
static MAX_LENGTH = 1024;
...
}
中需要恢復(fù)原值afterEach。
或者至少使它成為只讀原型屬性。這可以像jest.spyOn(Input, 'MAX_LENGTH', 'get').mockReturnValue(...)安裝組件之前一樣模擬:
class Input extends React.Component {
get MAX_LENGTH() { return 1024 };
...
}
沒(méi)有它,它需要在初始渲染后在組件實(shí)例上進(jìn)行模擬:
const wrapper = mount(<Input value={'foo'} />)
wrapper.instance().MAX_LENGTH = ...;
wrapper.setProps({});
...
添加回答
舉報(bào)
0/150
提交
取消