我有一个输入组件,我想为它创建单元测试。我有一些错误,我不能修复它。我已经在一些博客上看到了,但我不知道如何解决它。我正在努力提高我在单元测试方面的知识,但这很复杂。
下面是我放入codesandbox的代码
我不明白为什么我有这个错误,因为我没有任何布尔参数。你能告诉我怎么解决吗?
import React from 'react';
import { render, screen } from '@testing-library/react';
import TextInput from './TextInput';
import { TextInputProps } from 'src/types';
describe('Text Input', function () {
it('should render default', function () {
const props: TextInputProps = {
change(): void {},
value: '',
placeholder: 'Full Name',
variant: 'neutral',
};
render(<TextInput {...props} />);
expect(screen.getByRole('textbox')).toBeInTheDocument();
expect(screen.getByRole('textbox')).toHaveAttribute(
'placeholder',
'Full Name'
);
expect(screen.getByRole('textbox')).toHaveAttribute('value', '');
});
});
import React from 'react';
import { TextInputProps } from 'src/types';
import './index.scss';
const TextInput = ({
value,
placeholder,
type = 'text',
variant,
change,
}: TextInputProps) => {
const inputVariant = `input-field ${
variant === 'highlight' ? 'highlight' : ''
}`;
return (
<div className="content-input">
<input
className={inputVariant}
value={value}
placeholder={placeholder}
type={type}
onChange={change}
/>
</div>
);
};
export default TextInput;
import { ChangeEventHandler } from 'react';
export interface TextInputProps {
value: string;
placeholder: string;
type?: 'text' | 'password' | 'email';
variant: 'neutral' | 'highlight';
change: ChangeEventHandler<HTMLInputElement>;
}
2条答案
按热度按时间zour9fqk1#
您遇到的错误与
TextInput
组件中的更改属性有关。更改属性定义为`ChangeEventHandler。但是,在测试代码中,您为change prop提供了一个空函数,它与预期的类型不匹配。若要解决此错误,可以在测试代码中提供处理更改事件的有效函数。下面是如何修改测试代码的示例:
rkkpypqq2#
使用.tsx文件,而不是.ts文件。
在您发送的示例中,我能够重现错误,然后注意到您使用的是.ts文件。将其重命名为.tsx,错误就消失了。