- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经构建了一个自定义 Input
呈现 HTML
的 React 组件(想想包装器)输入元素。输入值时,更改会像这样传递给父组件:
const handleChange = (event: SyntheticInputEvent<EventTarget>) => {
setCurrentValue(event.target.value);
props.onChange(event);
};
一切都按预期工作,但现在我想为它编写一个测试:
it('Should render a Text Input', () => {
const onChange = jest.fn();
const { queryByTestId } = renderDom(
<Input type={InputTypesEnum.TEXT} name='car' onChange={onChange} />
);
const textInput = queryByTestId('text-input');
expect(textInput).toBeTruthy();
const event = fireEvent.change(textInput, { target: { value: 'Ford' }});
expect(onChange).toHaveBeenCalledTimes(1);
});
除了我想添加最后一个 expect
外,这也很好用使用 toHaveBeenCalledWith
.我已经尝试了几件事,但不知道该怎么做。有什么想法吗?
更新:我一直在读这个:https://reactjs.org/docs/events.html#event-pooling .看来如果我改变 handleChange
像这样:
const handleChange = (event: SyntheticInputEvent<EventTarget>) => {
event.persist();
setCurrentValue(event.target.value);
props.onChange(event);
};
然后是从onChange
接收到的对象确实更改以包含我的测试数据。也就是说,我不喜欢仅仅为了适应测试而改变生产代码的重要特性(在本例中为事件池)的想法。
最佳答案
你可以用toHaveBeenCalledWith
做这样的事情
expect(onChange).toHaveBeenCalledWith(
expect.objectContaining({
target: expect.objectContaining({
value: "Ford"
})
})
);
关于reactjs - 使用 toHaveBeenCalledWith 检查 EventTarget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62398158/
我试图弄清楚点击了哪个按钮,此代码在 IE 中运行良好,但如果我在 Chrome、Firefox 或 Safari 中运行,则它不会执行任何操作。在 firefox 中使用 firebug 时,我查看
如何设置EventTarget一个事件。 var myObj = {foo: 'bar'}; var event = new Event('eventName'); event.target = my
当前版本的 JavaScript 将 EventTarget 实现为类而不是接口(interface),因此您可以使用所有预期方法创建 EventTarget 实例。 我试图复制/粘贴 EventTa
我是 Fable/Elmish/React 的新手,我正在尝试了解转换 EventTarget 的语法,以便我可以访问 .value我能找到的所有例子都使用 input [ Value model.V
使用闭包库,您可以让任何对象能够调度扩展 goog.events.EventTarget 的事件。 .这目前可以使用 Dart 库吗? 我想它看起来像这样: #import('dart:html');
我想在我的客户端程序中创建一个自定义事件发射器。我正在引用此(稀疏)文档 EventTarget 我的实现尝试 var Emitter = function Emitter() { EventTa
我试图让扩展面板仅在点击箭头时展开,但是当我尝试编译它时,此功能 private _isExpansionIndicator(target: EventTarget): boolean { c
当我运行代码时: public onResize(event: Event) { console.log(event.target.innerWidth); //--solution-
我为 WebGL 程序导出了以下 JS 类: export default class MyClass extends EventTarget { constructor(gl) { su
我正在使用 selectionStart和 selectionEnd为了获得文本选择的起点和终点。 代码:https://codesandbox.io/s/busy-gareth-mr04o 但是,我
我已经构建了一个自定义 Input呈现 HTML 的 React 组件(想想包装器)输入元素。输入值时,更改会像这样传递给父组件: const handleChange = (event: Synth
嘿,我是 Typescript 的新手,在实现 Event Target 时遇到了一些问题。 Javascript 中使用的 event.target.matches 的 typescript 等价物
我收到以下关于事件类型的错误。错误:类型“EventTarget”上不存在属性“结果”。 我的.ts文件, select4File(event) { if (event.target.file
我遇到了无法摆脱的 JavaScript 错误:Uncaught TypeError: 无法在“EventTarget”上执行“addEventListener”:作为参数 2 提供的回调不是对象。
每当用户更改其浏览器大小时,我的 Web 应用程序必须自动调整 iframe 标记的大小。因此,最终效果就像一个 google g-mail,其中 gmail 应用程序自动调整包含邮件内容的 ifra
我的 .ts 文件中有一个 Javascript,它一直显示属性“result”在类型“EventTarget”上不存在??? imageUpload() { window.onload = func
如果可能的话,我正在寻找答案,甚至是一个好主意。 通常,作为对 IE8 及更早版本的修复,会使用与此类似的解决方法: var addEvent = function(obj, e, cb) {
我在高级编译模式下遇到错误。 Uncaught TypeError: Object # has no method 'attachEvent' 经过一些 source map 魔法后,我发现这是从 g
我正在尝试(也许是徒劳的)想出一种使用发布-订阅模式的方法,同时a) 使用no 库和b ) 最小化使用它的模块中的样板代码。到目前为止,我想到的最好的是: var handle = document.
当尝试在单击后访问按钮上的数据集时,出现此^错误。 linkProvider = (ev: React.SyntheticEvent) => { console.debug('ev.target'
我是一名优秀的程序员,十分优秀!