黄瓜与 RSpec

2024-06-19

我想开始深入研究 BDD。我以前从未使用过 TDD,现在 不确定我是否应该从学习 RSpec 开始,然后跳到 Cucumber 或者直接使用 Cucumber。

我一直在互联网上阅读有关两者的内容,在我看来 Cucumber 可能是 RSpec 的“替代品”。我是对的还是应该是 一个用于某些事物,另一个用于其他事物?


Cucumber 和 RSpec 都用于 BDD,但用途不同。

将 Cucumber 视为通过与 Web 浏览器交互从用户的角度描述发生的情况。所以你可以采取如下步骤:

Given I'm not logged in
When I login
Then I should be on the user dashboard page

相当广泛,但背后有很多事情发生。 Cucumber 有助于确保涵盖所有这些高级特性和功能(例如,当您的用户登录时,他们会被带到正确的页面)。但它不是测试较低级别代码的好工具。这就是 RSpec 的用武之地。

以上面的登录示例为例。您的用户可能使用电子邮件地址或用户名登录。您可能想确保电子邮件地址有效或用户名具有一定的长度......或者他们用于登录的内容是唯一的。您可以在用户模型中通过验证来执行此操作。

这是一个简单的示例,但这是您使用 RSpec 测试的类型(在您的 spec/models/user_spec.rb 文件中)。这是not您可以使用 Cucumber 进行测试。

所以底线是:

Cucumber 用于更高级别的测试,从用户的角度描述广泛的功能

RSpec 用于较低级别的测试,描述类、方法、模型、控制器等实际工作方式的详细信息。

这篇文章实际上很好地解释了何时从一种工具过渡到另一种工具:

http://www.sarahmei.com/blog/2010/05/29/outside-in-bdd/ http://www.sarahmei.com/blog/2010/05/29/outside-in-bdd/

我还推荐“RSpec 书 http://pragprog.com/book/achbd/the-rspec-book" and "Rails 测试处方 http://pragprog.com/book/nrtest/rails-test-prescriptions“关于工具和一般测试的良好资源。

附: - 不要混淆,但实际上你也可以使用 RSpec 来处理高级的东西。但其中一些决定取决于您更喜欢哪种工具,或者您是否正在与非技术客户合作,他们会从 Cucumber 用于描述场景的用户友好语法中受益更多。

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

黄瓜与 RSpec 的相关文章

随机推荐

  • 我可以用关闭的文件对象做什么?

    当您打开文件时 它存储在一个打开的文件对象中 该对象使您可以访问该文件的各种方法 例如读取或写入 gt gt gt f open file0 gt gt gt f
  • Emacs htmlize 在批处理模式下?

    我喜欢在 emacs 中使用 htmlize file 将 clojure 源文件转换为 html 我想从 linux 命令行使用它 或者从 clojure 本身以编程方式使用它 I tried emacs eval htmlize fil
  • VS Code 在交互式变基期间不会等待我 [重复]

    这个问题在这里已经有答案了 如果我使用交互式变基git rebase i使用为 Git 配置的默认编辑器 一切都运行良好 如果我在我的全局中添加以下内容 gitconfig core editor C Program Files x86 M
  • 在 Haskell 中创建 100 万个线程需要多长时间?

    据我了解 Haskell 有绿色线程 但它们的重量有多轻 是否可以创建100万个线程 或者 100 000 个线程需要多长时间 from here http www reddit com r programming comments a4n
  • 在 Marshmallow 中获取蓝牙本地 mac 地址

    在 Marshmallow 之前 我的应用程序将通过以下方式获取其设备 MAC 地址BluetoothAdapter getDefaultAdapter getAddress 现在 随着 Marshmallow Android 的回归02
  • 更快的算法来计算有多少数字可以被范围内的特定整数整除

    int a b c d 0 cin gt gt a gt gt b gt gt c for int i a i lt b i if i c 0 d cout lt
  • Flutter - 选择 TextFormField 时键盘不显示

    我目前遇到一个问题 当我选择任何一个时 键盘不会出现TextFormFielda 内的小部件Form小部件 这是表单的代码 位于我的内部CreateAccountForm有状态的小部件 import package flutter mate
  • 必须打开存储才能执行此操作 - System.IO.Packaging.Package

    我正在使用 System IO Packaing Package 类来压缩文件 我的应用程序的多个实例可以同时运行 并读取和保存文件 当处理小文件时 一切似乎都很好 但是当涉及大文件时 如果应用程序的两个实例同时保存 我会收到一个异常 消息
  • 为什么在尝试编译此代码时会收到错误“错误:未知类型名称'虚拟'”?

    Code struct IRenderingEngine virtual void Initialize int width int height 0 virtual void Render const 0 virtual void Upd
  • 在 Visual Studio 中继承构建后事件?

    我在 Visual Studio 中有一个解决方案 其中有一个共享属性表 其中包含构建后事件命令 bar 需要为每个项目执行 Foo props gt 通用属性 gt 构建事件 gt 构建后事件 gt 命令行 栏 然后 我如何指定其他特定于
  • jquery ajax调用一个接一个循环而不停止页面渲染

    我有一个超过 100 行的表 每行包含 pdf 文件及其说明以及最后一列状态 状态显示 pdf 文件是否可读 一旦表格加载到浏览器中 我就会从表格的每一行获取每个文件名 并使用 ajax 调用对其进行处理 如果文件可读 我将该行的状态字段更
  • 带有 Play 框架的 cassandra

    我正在尝试开发一个由两部分组成的应用程序 Web 服务和 Android 应用程序 我计划使用 java play 框架和 cassandra noSQL 数据库来实现我的 Web 服务 我已经找了两天了 我还是不知道该怎么做 我需要集成一
  • 如何使用 Spring Boot 和 Flyway 设置 Quartz 调度程序的数据库架构?

    我有一个 Spring Boot 应用程序 它使用 Quartz 调度程序和 PostGreSQL 数据库作为存储 我正在将它从使用它自己的数据库运行迁移到publicschema 来针对每个应用程序使用一个 schema 的共享数据库运行
  • 如何在 MySQL 中测试 Select for Update

    我正在表演SELECT FOR UPDATE或 InnoDB 表的行级锁定 我的目的是只有一个请求可以读取同一行 因此 如果两个用户同时请求相同的数据 其中只有一个人获取数据 即第一个触发查询的人 但是我如何测试锁定是否已放置 因为我正在通
  • RSpec 2 中使用 OR 相等

    下面这个例子的正确写法是什么 玩家的分数应等于 5 或 8 it should equal 5 or 8 do player score should 5 or 8 end Thanks Tim 5 or 8将始终产生结果 5 并且不会执行
  • 输入连接-如何删除选定的文本?

    我为 Android 制作了一个自定义键盘 当我按下键盘的退格按钮时 我使用 getCurrentInputConnection deleteSurroundingText 1 0 从输入字段中删除一个字母 但是 当我选择一些文本然后按退格
  • SetWindowsHookEx 函数返回 NULL

    我正在研究 DLL 注入 但收到错误如下 挂接进程失败 87 参数不正确 目标进程和dll都是64位的 注入代码为 BOOL HookInjection TCHAR target TCHAR dll name https msdn micr
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • 黄瓜与 RSpec

    我想开始深入研究 BDD 我以前从未使用过 TDD 现在 不确定我是否应该从学习 RSpec 开始 然后跳到 Cucumber 或者直接使用 Cucumber 我一直在互联网上阅读有关两者的内容 在我看来 Cucumber 可能是 RSpe