Enzyme:如何测试作为 prop 传递的 onSubmit 函数?

2023-12-25

我对酶还很陌生。我有两个正在测试的组件。

form.jsx

const LoginForm = ({ style, handleSubmit }) => {
  return (
    <form onSubmit={handleSubmit}>
        <Button type='submit'>
          Login
        </Button>
    </form>
  );
};

LoginForm.propTypes = {
  handleSubmit: PropTypes.func.isRequired
};

我在另一个组件中使用这个组件,如下所示:

组件.jsx

export default class Login extends Component {
  constructor(props) {
    super(props);
    this.onLogin = this.onLogin.bind(this);
  }

  onLogin(event) {
    event.preventDefault();
    this.props.loginUser();
  }
  render() {
    return (
      <LoginForm style={loginFormStyles} handleSubmit={this.onLogin} />      
    );
  }
}

Login.propTypes = {
  auth: PropTypes.object.isRequired, //mapStateToProps
  loginUser: PropTypes.func.isRequired //mapDispatchToProps
};

我已经编写了测试form他们正在过去。

表单测试.js

 it('should have a onSubmit handler', () => {
      const props = {
        handleSubmit: () => {}
      };
      const wrapper = shallow(<LoginForm {...props} />);
      expect(_.isFunction(wrapper.props().onSubmit)).to.be.true;
    });

    it('should should call handlesubmit on form submission', () => {
      const handleSubmit = sinon.spy();
      const wrapper = shallow(<LoginForm handleSubmit={handleSubmit} />);
      wrapper.simulate('submit');
      expect(handleSubmit).to.have.been.called;
    });

这些测试正在通过。令人困惑的部分是:

1-我如何测试onLogin函数于Component.jsx from form.jsx?

2-反之亦然,如果我必须触发onSubmit of form.jsx from component.jsx我该怎么做呢?


首先,您可以重命名Component.jsx到别的东西。

对于测试,您可以执行以下操作,

import Component from '../src/login';
import { stub } from 'sinon';


describe('login', () => {
  it('should call onsubmit', () => {
    const onSubmit = stub()
      .withArgs('username', 'password');
    const loginComponent = mount(<LoginForm  handleSubmit={onSubmit} /> );
    loginComponent.simulate('submit');
    expect(onSubmit.calledOnce).to.equal(true);
  });
});

我还没有对此进行测试,但它与您所看到的很接近。

更新: 我测试了这个并且它有效。

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

Enzyme:如何测试作为 prop 传递的 onSubmit 函数? 的相关文章

  • 如何从 Visual Studio 以调试模式运行 NUnit?

    我最近正在为我一直在研究的一些 C 构建一个测试框架 我在工作区中设置了 NUnit 和一个新项目来测试该组件 如果我从 Nunit v2 4 加载单元测试 一切都会很好 但我已经到了在调试模式下运行并设置一些断点非常有用的地步 我已经尝试
  • React延迟加载/无限滚动解决方案

    我花了一段时间才弄清楚如何使用优秀的延迟加载图像React Lazyload 组件 https github com jasonslyvia react lazyload 演示在滚动时延迟加载图像 但在测试时我无法获得相同的行为 罪魁祸首是
  • 单击react.js 切换列表的背景颜色

    我正在尝试创建一个具有以下功能的列表 悬停时更改列表项的背景颜色 单击时更改列表项的背景颜色 在单击的元素之间切换背景颜色 即列表中只有一个元素可以具有 clicked 属性 我已经执行了 onhover 1 和 2 功能 但无法实现第三个
  • 使用 stopPropagation() 处理 React 事件委托

    我有一个 React 项目 应该可以放置在任何网站上 我的想法是 我托管一个 javascript 文件 人们放置一个具有特定 ID 的 div 然后 React 在该 div 中进行渲染 到目前为止 除了点击事件之外 这是有效的 这些事件
  • redux thunk 调度后从商店返回承诺

    我正在尝试使用 redux thunk 链接调度 function simple action return type SIMPLE ACTION export function async action return function d
  • C# .NET 4.0 测试框架?

    如果我没记错的话 NUnit 是单元测试事实上的标准 但我刚刚下载了它 编写了一个简单的测试 然后显然我必须启动 GUI 并加载我的 exe组装 根本就失败了 我尝试编辑 C Program Files x86 NUnit 2 5 7 bi
  • 如何延迟 NavLink 的反应?

    Delay e gt e preventDefault setTimeout gt e unpreventDefault make this work 500 render
  • 全新安装 create-next-app 后,无效的 href 传递给路由器错误

    在我的本地计算机上安装 nextjs 应用程序后 使用create next app我在控制台中收到此错误Invalid href passed to router 有谁知道如何解决它 我尝试使用to属性而不是href属性在Link组件的但
  • Enzyme - 测试嵌套组件是否正确呈现

    我正在尝试测试当通过简单的布尔值更新状态时 在父组件中其子组件是否正确呈现 在父组件下面 class Parent extends Component render const isReady this state const props
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • Redux如何处理reducer中的错误

    我不确定如何处理 redux 减速器中的错误 当我的 API 获取返回数据时 我需要转换其结构并检查结果数据上设置的各种属性 但是 我不能在减速器中抛出错误 因为 redux 至少需要返回之前的状态 我该如何处理这个问题 注意 我正在使用反
  • Angular ui 路由器单元测试(状态到 url)

    我在应用程序中对路由器进行单元测试时遇到一些麻烦 该应用程序是基于 Angular ui 路由器构建的 我想要测试的是状态转换是否适当地更改了 URL 稍后会有更复杂的测试 但这就是我开始的地方 这是我的应用程序代码的相关部分 angula
  • 为什么带有隐式转换运算符的自定义结构上的 Assert.AreEqual 失败?

    我创建了一个自定义结构来表示金额 它基本上是一个包装器decimal 它有一个隐式转换运算符将其转换回decimal 在我的单元测试中 我断言 Amount 等于原始十进制值 但测试失败 TestMethod public void Amo
  • 为什么 useReducer 调度会导致重新渲染?

    假设我实现一个简单的全局加载状态 如下所示 hooks useLoading js import React createContext useContext useReducer from react const Context crea
  • 如何修复 Typescript 中的“以下属性中缺少类型‘{}’...”错误?

    我是 Typescript 新手 因此遇到了问题 我正在使用 Ant Design 并遵循如何在 Typescript 中使用 Form 但使用FunctionComponent 但是 我收到 Typescript 抛出的错误 TypeSc
  • 如何判断网站是否使用 next.js?

    很容易判断一个网站是否使用 ReactJS 通过使用反应开发者工具 https chrome google com webstore detail react developer tools fmkadmapgofadopljbjfkapd
  • 如何在单击按钮时清除反应挂钩中的间隔

    我正在用反应钩子构建一个简单的计时器 我有两个按钮启动和重置 当我单击开始按钮时 handleStart 函数工作正常 计时器启动 但我不知道如何在单击重置按钮时重置计时器 这是我的代码 const App gt const timer s
  • 如何跨多个 React Redux 组件使用 requestAnimationFrame 实现游戏循环?

    努力思考最好的解决办法 我可以使用递归调用requestAnimationFrame有一个游戏循环 export interface Props name string points number onIncrement gt void o
  • 如何在MUI GridList中实现图块的水平滚动?

    这是我的 JS 页面 我需要在其中实现GridList组件显示多个图块 并且在列表大小超出屏幕限制后可水平滚动 import React useState from react import Header from common heade
  • Python模块单元测试的最佳文件结构组织?

    遗憾的是 我发现有太多方法可以在 Python 中保存单元测试 而且它们通常没有很好的文档记录 我正在寻找一种 终极 结构 它可以满足以下大部分要求 be discoverable by test frameworks including

随机推荐

  • laravel 重定向到新选项卡

    我需要在发布请求后打开一个新的 URL 我已经在控制器的末尾完成了此操作 Redirect away url 上面的调用工作完美 但是 我想在新选项卡中打开 URL 我尝试了 Laravel 文档中的方法和预期方法 没有一个按预期工作 Re
  • 如何使用 g++47 允许 -z multidefs

    我如何告诉链接器g 允许符号的多个定义 选择第一个出现 z multidefs 允许多个符号定义 默认情况下 可重定位对象 o 文件 之间出现多个符号定义 将导致致命错误情况 该选项抑制 错误条件并允许采用第一个符号定义 仅当指定 b sv
  • Paypal REST API 自适应/多次付款(更改收款人)

    我刚刚开始关注 PaypalREST api https developer paypal com webapps developer docs api 我似乎看不到的一件事是贝宝通话功能自适应支付 https www x com deve
  • 从java程序打开浏览器获取Google授权以询问已授予的权限

    为了让 java 程序访问我的 google 驱动器 我需要使用 json 凭证文件创建 oauth2 Credential 请参阅https console developers google com https console deve
  • 如何将html id添加到rails form_tag

    我正在使用 Rails 2 2 2 我想将 id 添加到由 form tag 生成的 html 表单代码中 目前生产
  • 嵌套 dokey 宏

    我只是想知道是否有一种方法可以从另一个 doskey 宏中调用一个 doskey 宏 我尝试了以下方法 但它不起作用 gt doskey cleanpix PATH cleanpix bat gt doskey cp cleanpix 我究
  • NativeBase 选项卡强制 RTL 问题 - 修复

    当我执行forceRtl 时 我遇到了本机基本选项卡的问题 一切正常 但只有本机基础在初始加载时不显示任何内容 所以我有一个临时解决方案 在native base src basic Tabs index js中 import I18nMa
  • SSAS 分区切片表达式

    我按最近 13 个月对多维数据集进行分区 然后使用旧分区来保存较早的月份 我已经成功创建了动态分区 但现在我需要为每个分区添加一个动态切片 我想我可以在分区切片表达式中使用它 Dim Date Month CStr Month Now la
  • Java 中的 var 关键字

    对于Java 10或 我们可以使用var关键字进行声明 在初始化时 编译器将推断类型 当我实例化类并将其分配给声明的变量时会发生什么var 是接口的实现吗 将推断哪种类型 接口还是实现 我的2美分来纠正问题和答案 The var is 不是
  • Leetcode 入室抢劫犯

    我正在尝试入室抢劫者 https leetcode com problems house robber leetcode 上的问题 dp 问题 来自一位 GTX 用户的解决方案看起来简单而优雅 int rob vector
  • 以客户身份通过​​ iOS 应用程序登录 BigCommerce API

    我正在为 BigCommerce com 上的商店开发 iOS 应用程序 我已成功从 BigCommerce API 检索产品列表 并且还使用该列表创建了一个新用户 创建用户 https developer bigcommerce com
  • Flutter:自动路由:RouteGuard 在 AutoTabsScaffold 中不起作用

    我正在尝试为我的 AutoTabsScaffold bottom nav 添加身份验证防护 但它不起作用 它可以在其他导航页面中工作 但不仅仅在我的登陆页面内 其中 AutoTabsScaffold 底部导航位于 我在这里遗漏了什么吗 us
  • Apache mod_rewrite 域到子域?

    我有这个地址http www example com http www example com并有这个页面http www example com world http www example com world 我可以用 mod rewr
  • android:什么时候使用onStart()、onStop()?

    我读过几篇描述两者之间区别的帖子onStart and onResume onStart 当活动变得可见时调用 onResume 当活动准备好与用户交互时调用 美好的 我总是只是添加代码onPause and onResume 并且从不关心
  • htaccess子域

    如何使用 htaccess 做到这一点 subdomain domain com gt domain com subdomain no redirect on client side domain com subdomain gt subd
  • jqGrid 在第一次加载时排序

    我的网格有以下代码 我使用与数据源位于同一目录中的 XML 文件 var handsetGrid products jqGrid url catalog xml datatype xml colNames SKU Name Brand De
  • 操作错误:没有这样的表

    所以我正在开发我的应用程序 并向我的模型添加了一个 slugfield 然后像往常一样继续makemigrations 并且出现了巨大的红色错误墙 Traceback most recent call last File C Users A
  • 在开始编码之前如何规划我的基于网络的项目? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我和我的朋友开始作为合作伙伴一起工作 我们决定制作一个又一个的 Kick as 网站 我们写下了大约 100 个想法 是的 我们首先在
  • 如何在 python 中解压非常大的文件?

    使用 python 2 4 和内置ZipFile库 我无法读取非常大的 zip 文件 大于 1 或 2 GB 因为它想要将未压缩文件的全部内容存储在内存中 是否有另一种方法可以做到这一点 使用第三方库或其他一些黑客 或者我必须 掏出 并以这
  • Enzyme:如何测试作为 prop 传递的 onSubmit 函数?

    我对酶还很陌生 我有两个正在测试的组件 form jsx const LoginForm style handleSubmit gt return