无法使用 React + Jest + Datepicker + TextMask 读取 null 的 属性 'selectionEnd'
Cannot read property 'selectionEnd' of null using React + Jest + Datepicker + TextMask
我有一个正在运行的单元测试,但现在我向我的 react-datepicker
添加了一个名为 react-text-mask
的新包,我试图模拟它,但当我收到以下消息时运行 npm run test
:
TypeError: Cannot read property 'selectionEnd' of null
at Object.update (node_modules/react-text-mask/dist/reactTextMask.js:1:9205)
at t.value (node_modules/react-text-mask/dist/reactTextMask.js:1:2431)
at t.value (node_modules/react-text-mask/dist/reactTextMask.js:1:2490)
at commitLifeCycles (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:6427:22)
at commitAllLifeCycles (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:7516:7)
我的 react-datepicker
和 react-text-mask
:
<RCDatePicker
{...rest}
locale="pt-BR"
selected={value}
onChange={onChange}
readOnly={readOnly}
dateFormat={dateFormat}
minDate={minDays ? moment(baseDate).subtract(minDays, 'days') : undefined}
maxDate={maxDays ? moment(baseDate).add(maxDays, 'days') : undefined}
disabled={disabled}
customInput={<MaskedInput
mask={[/[0-3]/, /\d/, '/', /[0-1]/, /\d/, '/', /[1-2]/, /\d/, /\d/, /\d/]}
/>}
>
我的单元测试:
describe('<DatePicker />', () => {
it('should have default props', () => {
const mock = jest.mock('react-text-mask', () => props => <input type="text" {...{ ...props }} />);
const tree = renderer.create(<DatePicker onChange={Function} />).toJSON()
jest.spyOn(mock)
expect(tree).toMatchSnapshot()
})
})
我找到了解决办法,就是把 mock 放在 describe 之外。
import React from 'react'
import renderer from 'react-test-renderer'
import { DatePicker } from './DatePicker'
jest.mock('react-text-mask', () => props => <input type="text" {...{ ...props }} />)
describe('<DatePicker />', () => {
it('should have default props', () => {
const tree = renderer.create(<DatePicker onChange={Function} />).toJSON()
expect(tree).toMatchSnapshot()
})
})
我有一个正在运行的单元测试,但现在我向我的 react-datepicker
添加了一个名为 react-text-mask
的新包,我试图模拟它,但当我收到以下消息时运行 npm run test
:
TypeError: Cannot read property 'selectionEnd' of null
at Object.update (node_modules/react-text-mask/dist/reactTextMask.js:1:9205)
at t.value (node_modules/react-text-mask/dist/reactTextMask.js:1:2431)
at t.value (node_modules/react-text-mask/dist/reactTextMask.js:1:2490)
at commitLifeCycles (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:6427:22)
at commitAllLifeCycles (node_modules/react-test-renderer/cjs/react-test-renderer.development.js:7516:7)
我的 react-datepicker
和 react-text-mask
:
<RCDatePicker
{...rest}
locale="pt-BR"
selected={value}
onChange={onChange}
readOnly={readOnly}
dateFormat={dateFormat}
minDate={minDays ? moment(baseDate).subtract(minDays, 'days') : undefined}
maxDate={maxDays ? moment(baseDate).add(maxDays, 'days') : undefined}
disabled={disabled}
customInput={<MaskedInput
mask={[/[0-3]/, /\d/, '/', /[0-1]/, /\d/, '/', /[1-2]/, /\d/, /\d/, /\d/]}
/>}
>
我的单元测试:
describe('<DatePicker />', () => {
it('should have default props', () => {
const mock = jest.mock('react-text-mask', () => props => <input type="text" {...{ ...props }} />);
const tree = renderer.create(<DatePicker onChange={Function} />).toJSON()
jest.spyOn(mock)
expect(tree).toMatchSnapshot()
})
})
我找到了解决办法,就是把 mock 放在 describe 之外。
import React from 'react'
import renderer from 'react-test-renderer'
import { DatePicker } from './DatePicker'
jest.mock('react-text-mask', () => props => <input type="text" {...{ ...props }} />)
describe('<DatePicker />', () => {
it('should have default props', () => {
const tree = renderer.create(<DatePicker onChange={Function} />).toJSON()
expect(tree).toMatchSnapshot()
})
})