React TestUtils,如何模拟文档mouseMove?

2023-12-29

我想用TestUtils.Simulate.mouseMove on the document。我有一个组件Dragger这增加了一个mouseMove事件侦听器document。这是一个不完整的版本:

// Dragger.js
'use strict';

var React = require('react');

export default React.createClass({
    propTypes: {
        handleDrag: React.PropTypes.func // callback set by parent
    },
    getInitialState: function() {
        return {dragging: false}
    },
    componentDidUpdate: function(props, state) {
        // 
        if (this.state.dragging && !state.dragging) {
            document.addEventListener('mousemove', this.onMouseMove)
        } else if (!this.state.dragging && state.dragging) {
            document.removeEventListener('mousemove', this.onMouseMove)
        }
    },
    onMouseDown: function(e) {
        this.setState({dragging: true})
    },
    onMouseMove: function(e) {
        // Calls back to the parent with the drag
        this.props.handleDrag(e);
    },
    render: function() {
        return <div onMouseDown={this.onMouseDown} ></div>
    }
});

我在用着jasmine http://jasmine.github.io/,我想确保我的handleDrag回调被调用后mouseDown随后是一个mouseMove.

// Dragger.spec.js

var React = require('react/addons');
import Dragger from './Dragger';

var TestUtils = React.addons.TestUtils;

describe('Dragger', function() {
    it('should call the callback after drag interaction', function() {
        // make callback to spy on
        var f = {callback: function(e){return}};

        // render Dragger
        var dragger = TestUtils.renderIntoDocument(<Dragger handleDrag={f.callback} />);

        // spy on callback
        spyOn(f, 'callback');

        // simulate a mouseDown and mouseMove
        TestUtils.Simulate.mouseDown(dragger.getDOMNode(), {button: 0});
        TestUtils.Simulate.mouseMove(document);

        expect(f.callback).toHaveBeenCalled(); // FAILS!
    }
}

But the mouseMove事件没有被正确模拟。我看到 2 个问题

  1. 我可能需要将事件数据传递给TestUtils.Simulate.mouseMove。例如,调用TestUtils.Simulate.mouseDown(dragger.getDOMNode()) did not工作直到我将其更改为TestUtils.Simulate.mouseDown(dragger.getDOMNode(), {button: 0})。我应该传递什么事件数据TestUtils.Simulate.mouseMove?
  2. The document不属于分离的 DOM https://facebook.github.io/react/docs/test-utils.html#renderintodocument测试组件被渲染到。这可能是另一个原因Simulate.mouseMove不起作用。我可以在测试中使用什么来代替document?

我该如何使用TestUtils.Simulate.mouseMove?


经过几个小时使用酶和 React 的 TestUtils 尝试各种方法后,我终于发现仅在纯 JS 中创建和分派事件,这在我的玩笑测试中有效

it('calls handler on mouseDown on element, mouseMove on document', () => {
  const handler = jest.fn();
  const props = {
    foo: {
      uid: '1',
      resizable: true,
    },
    resizeHandler,
  };

  const instance = mount(<Header {...props} />);
  const resizer = instance.find('.resizer');
  const top = window.document.documentElement;  // target the documentElement
  resizer.simulate('mouseDown', { preventDefault: () => true });   // uses enzyme to simulate this event, adding listener to documentElement on mousemove
  const mouseMove = new Event('mousemove');  // creates a new event
  top.dispatchEvent(mouseMove);              // dispatches it
  const mouseUp = new Event('mouseup');
  top.dispatchEvent(mouseUp);
  expect(resizeHandler).toBeCalled();        // the passed in handler is called on mousemove
});

基本上你可以找到document.documentElement with window.document.documentElement并像其他任何事件一样从中分派事件element

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React TestUtils,如何模拟文档mouseMove? 的相关文章

随机推荐

  • 如何解析方法声明?

    我正在尝试解析方法声明 基本上我需要获取接收者基本类型的语法节点 type hello 和返回类型 notype and error The ast包看起来很简单 但由于某种原因我没有得到我需要的数据 即字段报告为零 唯一有用的数据似乎仅在
  • OSX 上的 JavaFX 屏幕捕获无头异常

    我正在将旧的 java 应用程序从 swing 转换为 javafx 但遇到了问题 我使用以下代码来捕获屏幕截图 public ScreenCapper ge GraphicsEnvironment getLocalGraphicsEnvi
  • HtmlUnit 和片段标识

    我目前想知道如何处理片段标识 我想要从中获取信息的链接包含片段标识 看起来 HtmlUnit 正在丢弃我的 url 的 db4mj 因此加载原始 url 有谁知道处理片段身份的方法吗 如果需要 我可以发布示例代码来进一步解释 EDIT 由于
  • 在 Redux Thunk 中使用 getState 是一个好的实践吗?

    我在其他问题中看到了关于是否使用的相互矛盾的 或者对我来说只是令人困惑的 答案getState在一个动作中是可以接受的 也可以是不可以接受的 我已经好几次看到它被称为反模式 对我来说 它似乎工作得很好 但如果我们不使用的话 这样做的最佳实践
  • 如何在 Java AWT 和/或 Swing 中更改光标图像?

    I m making a simple graphics editor i e a paint program I am not planning on anything fancy but I do want my program to
  • Laravel 返回带有旧输入的页面进行验证

    对于更新个人资料页面 我使用路线作为 Route get editdriver data DriverController EditDriver 在我使用验证后的控制器中 return Redirect to editdriver data
  • 如何使用 JavaScript 只允许字母数字字符

    一直在玩 JavaScript 我想做的就是只允许密码字段中的某些字符 a z A Z 和 0 9
  • HTML 阻止空格键滚动页面

    我正在使用代码 window onkeydown function e return e keyCode 32 这正是我想要的 当按下空格键时停止页面滚动 但是 它也会阻止用户在文本框中键入空格 有没有办法在打字时防止空格键滚动并保留空格键
  • .NET DDD 示例 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 您使用哪些 Python 重构工具? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有很多类想要重命名 其中一些名称很小 并且该名称在其他类名称中重复使用 我不希望更改该名称 其中大部分
  • GitHub Action:如何在 docker 容器内运行命令

    今天刚开始学习CI CD 今天不知道 docker 之前是什么 我能够通过我的 Unity 项目在 CircleCI 上运行 CD 所有运行命令都发生在 docker 容器内 version 2 1 executors unity dock
  • 修复 HTML 视频元素的黑色矩形

    我正在实施 WebRTC 视频聊天 我想实现以下案例 默认情况下 视频元素通过 CSS 具有背景图像 如果没有视频输入 则用户会看到他 或对话者 的头像 No video expected result No video actual re
  • 如何设置 Angular Timepicker 的最短时间和最长时间?

    有没有办法为 Angular 的引导时间选择器设置最短时间和最长时间 使用 Angular 的 Datepicker 设置支持最小和最大日期 我想知道 Timepicker 是否允许类似的功能 查看中的设置Timepicker 的 Angu
  • 如何在 EF Code First 中创建/更新 LastModified 字段

    我想添加一个列 用于在将记录保存到磁盘时存储当前的日期时间 实现这一目标的最佳方法是什么 我知道这不是一个非常复杂的问题 但我想知道 EF 是否有任何最佳实践或任何功能可以简化任务 例如 有没有什么方法可以将该字段的逻辑包含在表类中 以便在
  • Java EE DAO / DTO(数据传输对象)设计模式

    目前 我正在为我的工作项目使用 struts2 框架 在设计我的 DAO 类时 我心中有一个改进设计模式的问题 在我的搜索功能上 我有3种搜索 使用一个参数和另一个参数进行搜索 使用多个参数进行搜索 不带参数搜索 我的问题是 做DAO方法最
  • 如何查询 Sphinx 精确匹配的短语?

    Sphinx 似乎正在逐字搜索文档 我不知道如何在文档中搜索确切的短语 我试过SPH MATCH ALL SPH MATCH PHRASE但所有人都逐字搜索文档 我在我的 PHP 应用程序中使用它 如何查询 Sphinx 以匹配精确的字符串
  • 如何制作“空”RSS 提要

    我对 RSS 提要不太熟悉 但我可以使用 PHP 动态创建提要 而且效果很好 我的问题是 有时提要没有任何项目 我将提要项目的期限限制为 60 天 有时在这段时间内什么也没有发生 我期望发生的是我根本不会有任何
  • 如何在同一台服务器上托管两个公开端口 80 的 Docker 容器

    我有 2 个网站 客户端需要在端口 80 上连接到 每个网站都在自己的容器中运行 我想在同一台 Docker 主机上运行这两个容器 据我所知 80端口只能在主机上暴露一次 存在哪些具有最小开销 管理的解决方案 允许我在同一主机上简单地运行两
  • 从实体框架类获取默认sql值

    我使用的是 T4 模板 对中提出的模板稍加修改this https stackoverflow com a 15936878 1641172答案是从我的 EF POCO 生成打字稿接口 EF Core POCO 首先生成数据库 并且某些数据
  • React TestUtils,如何模拟文档mouseMove?

    我想用TestUtils Simulate mouseMove on the document 我有一个组件Dragger这增加了一个mouseMove事件侦听器document 这是一个不完整的版本 Dragger js use stri