rspec 中的相关测试

2024-04-24

我编写功能测试,并且我需要进行的测试取决于之前测试的通过情况。假设我有一个按钮,可以打开一个窗口,其中有一个功能。也就是说,为了检查此功能,我需要首先检查按钮的正确操作(即打开窗口或不起作用)。因此,我需要这样做,如果单击按钮时测试失败,则测试不会运行来检查功能窗口。单独编写测试 - 对我来说不是一个选择。我希望看到这样的东西:

describe "some tests" do
  open_result = nil

  it "should check work button" do
    click_to_button()
    open_result = window_opened?
    open_result.should == true
  end

  if open_result

    describe "Check some functional" do

      it "should check first functional"

      it "should check second functional"

    end

  end

end

我知道这个方法不适用于 rspec。这只是对我想看到的内容的简单描述。使用 rspec 可以实现吗?如果没有的话还有其他方法吗(宝石等)


RSpec 被设计为单元测试框架,因此从中获得完美的功能测试行为可能有点困难。在 RSpec 的哲学测试中must独立。当您使用时尤其重要autotest:在这种情况下,执行顺序确实是不可预测的。悲伤但真实。

Still, of course you can save some state between test using global ($a) or instance (@a, not sure here) variables. Anyway you need to move if into it block so that it will be executed in time. You may use pending https://github.com/dchelimsky/rspec/wiki/Pending-Examples keyword to interrupt a test without failing it in case if pre-condition is not met.

BUT

我确信最好的解决方案是避免金锤子 http://en.wikipedia.org/wiki/Law_of_the_instrument反模式,而不是在单元测试框架中编写功能测试。您不想测试一些单独的功能。你确实想测试场景。所以我建议尝试一些场景测试套件。

Behold, Cucumber http://cukes.info/!用法很简单:

  1. 定义参数化场景stepsRuby 中,以及 RSpec 风格的期望
  2. 用自然语言编写场景(是的,不仅是英语,甚至是俄语或其他语言 - 正则表达式的力量就在你身边)

就你而言,你将有features/step_definitions/gui_steps.rb就像是

Given /I pushed a button "(.*)"/ do |name|
    @buttons.find(name).click() # This line is pseudo-code, you know
end

以及类似的检查窗口打开情况等(请参阅examples https://github.com/cucumber/cucumber/blob/master/examples/i18n/en/features/step_definitons/calculator_steps.rb)。然后您可以以任何方式组合定义的步骤,例如您的两个场景可能看起来像

Scenario: Feature 1
    Given I pushed a button "go"
    And I focus on opened window
    When I trigger "feature 1"
    Then I should se "result 1" in text area

Scenario: Feature 2
    Given I pushed a button "go"
    And I focus on opened window
    When I trigger "feature 2"
    Then I should se "result 2" in text area

在这两种情况下,如果场景的某个步骤失败(例如我专注于打开的窗户— 如果未打开),后续步骤不执行——如你所愿。作为奖励,您将获得极其发生的情况以及步骤的详细输出(请参阅网站上的图片)。

好消息是您并不总是需要自己定义所有步骤。例如,当您测试 Web 应用程序时,您可以使用 webrat 步骤来执行典型的操作,例如当我转到 url/a/b/c 时 and 然后我应该在页面上看到文本“foo”。我不知道你使用哪个GUI测试框架,但可能已经有它的步骤,所以我建议你谷歌一下Cucumber%框架名称%。即使没有,编写一次这些步骤也不会比尝试从 RSpec 制作 Cucumber 更困难。

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

rspec 中的相关测试 的相关文章

  • 如何在 Ruby 中获取网页的 HTML 源代码 [重复]

    这个问题在这里已经有答案了 在 Firefox 或 Safari 等浏览器中 打开网站后 我可以右键单击该页面 然后选择以下内容 查看页面源代码 或 查看源代码 这显示了该页面的 HTML 源代码 在 Ruby 中 是否有一个函数 也许是一
  • Twitter-Typeahead 不提供建议

    我正在尝试使用twitter typeahead rails 我的目的是当我在 Typeahead 输入框中键入内容时 通过下拉框建议模型 User 的实例 但是 当我打字时什么也没有发生 有人看到我的代码有什么问题吗 Gemfile ge
  • 使用试运行选项运行黄瓜时出错

    我试图通过仅打开和关闭浏览器一次来提高运行测试的速度 http watirmelon com 2012 04 01 Five page object anti patterns http watirmelon com 2012 04 01
  • IO::EAGAINWaitReadable:资源暂时不可用 - 读取会阻塞

    当我尝试使用 socket 库中的 read nonblock 方法时 出现以下错误 IO EAGAINWaitReadable Resource temporarily unavailable read would block 但是当我通
  • 如何根据多对多相关模型的属性查找记录?

    楷模 InternalUser has many internal user roles has many roles through gt internal user roles InternalUserRole belongs to i
  • 如何用另一个子字符串替换子字符串(按索引 from..to)

    如何用其他字符串将某个字符中的子字符串替换为另一个字符 first 4 last 11 replacement show me the money replace part first last replacement gt show mo
  • Jekyll 服务错误:找不到 gem jekyll (>= 0.a) (Gem::GemNotFoundException

    做的时候sudo jekyll serve我收到以下错误 Users myusername rvm rubies ruby 2 4 2 lib ruby site ruby 2 4 0 rubygems rb 271 in find spe
  • rspec 不适用于设计用户身份验证

    我正在尝试使用 RSpec 来测试我的 Rails 应用程序 该应用程序使用设计用户身份验证 gem 以下是已捆绑的相关 gem 的列表 devise 3 4 1 rails 4 1 7 4 1 6 rspec 3 1 0 rspec co
  • gem 如何提供 Cucumber 功能和步骤定义?

    我有两个 Rails 项目 A 和 B 其中包含以下宝石 project A gem green theme path gt dev themes green theme gem devel tasks path gt dev themes
  • 黄瓜和 Rspec

    任何人都可以向我推荐黄瓜和 rspec 教程 rails 3 的好来源 简单示例 吗 Edit 实际上我正在寻找带有很好示例的免费在线资源 我觉得R规格书 http www pragprog com titles achbd the rsp
  • ActiveSupport 如何计算月度总和?

    我很高兴也很惊讶地发现 ActiveSupport 按照我想要的方式进行月度汇总 无论相关月份中有多少天 添加1 month对特定的Time将使您在该月的同一天着陆Time gt Time utc 2012 2 1 gt Wed Feb 0
  • Ruby - 乘法问题

    我的输出是这样的 ruby 1 9 2 p290 011 gt 2 32 3 gt 6 959999999999999 我记得有一天在另一台机器上我得到了它就像 2 32 3 6 我的错误是什么 非常感谢您阅读本文 如果您确实想向下舍入为整
  • Rails 4.0 expire_fragment/缓存过期不起作用

    我一直在尝试使用 Rails 的缓存功能 但我无法使某些缓存片段过期 尽管它们似乎已过期 使用 Rails 教程网站中指出的 Russian Doll Caching 我正在使用此配置 我使release controller rb 控制器
  • 如何使用符号来标识 ruby​​ 方法中的参数

    我正在学习 Rails 并回到 ruby 来了解 Rails 中的方法 以及 ruby 的实际工作原理 当我看到如下方法调用时 validates first name presence gt true 我有点迷惑不解了 如何在 ruby
  • 如何让我的导航栏出现在 Rails 应用程序的每个页面上?

    目前 我的导航栏位于我的index htm erb 文件中 目前仅在主页上显示 我想知道为了让导航栏出现在我的应用程序的每一页上 必须采取哪些必要步骤 我的导航栏的代码如下所示
  • 在初始化程序中重新加载命名空间常量

    今天遇到一个有趣的情况 我不确定如何解决 给定一个带有初始化器的 Rails 应用程序 file config initializers integrations rb Integrations CONFIGS key gt value f
  • Rails 应用程序中的持久 TCP 连接

    我有一个在服务器上运行的第三方应用程序 它对客户端进行身份验证并返回响应 我的问题是 对于我收到 Rails 应用程序的每个请求 我都需要建立 TCP 连接并获取数据 是否可以有一个持久连接 以便我可以减少建立连接的开销 我希望你使用的是
  • 使用 shoulda 重构 Rails 模型上的 rspec 测试

    了解后应该匹配器 https github com thoughtbot shoulda matchers通过回答关于属性可访问性测试的另一个 StackOverflow 问题 https stackoverflow com a 11849
  • 处理中渲染极地带面体时出现问题

    我最近一直在研究 Zohedrons 和Rob Bell http zomadic com 做出了美丽的 我玩了免费的极地带面体 Sketchup 插件 http zomebuilder com 并考虑使用几何图形加工 http proce
  • RSpec 抛出分段错误

    有时我的测试套件会无缘无故地抛出分段错误 这是输出 Users Test rvm gems ruby 1 9 3 p392 gems activerecord 3 2 9 lib active record relation query m

随机推荐

  • 在python中读取.xlsx格式

    我必须在 python 中每 10 分钟读取一次 xlsx 文件 做到这一点最有效的方法是什么 我尝试过使用 xlrd 但它不读取 xlsx 根据他的文档 但我不能这样做 获取Unsupported format or corrupt fi
  • Pulp.solvers.PulpSolverError:PuLP:无法执行glpsol.exe

    我是 python 和优化的新手 我收到一些错误 请帮我解决 我尝试在运行 Anaconda 3 的 PyCharm 中运行下面提到的代码 from pulp import x LpVariable x 0 3 y LpVariable y
  • 在不刷新页面的情况下如何使用ajax/jQuery显示数据库中的值

    通过jQuery ajax将数据插入数据库后 同时从数据库获取值而不刷新页面如何使用codeigniter显示数据库值 这是我的代码 Script
  • Go TCP 读取是非阻塞的

    我正在尝试用 Go 创建服务器和客户端 我已经成功地与服务器和客户端进行通信 但我遇到的问题是golang中的TCP读取是非阻塞的 我想知道 golang 中的读取是否有可能像 C 中的读取一样阻塞 谢谢 EDIT 这是服务器的源代码 fu
  • Brython 完全是客户端吗?

    我有一段用Python编写的代码 我想将该代码放在网页中 Brython 似乎是将这两件事粘合在一起的最简单方法 但我没有可以在服务器端实际运行代码的服务器 Brython 是否需要服务器端代码 或者我可以通过 例如 Dropbox 便宜地
  • 具有多个构造函数的 C++ init 成员变量

    通常构造函数应该是这样的 ctor1 SmallSim SmallSim mSimInit false mServersCreated false mTotalCPUTime 0 如果我有多个构造函数会怎样 在我看来 如果我从第二个构造函数
  • HttpSecurity、WebSecurity 和 AuthenticationManagerBuilder

    谁能解释一下何时覆盖configure HttpSecurity configure WebSecurity and configure AuthenticationManagerBuilder 配置 AuthenticationManag
  • 以编程方式创建 dataList

    我正在尝试以编程方式创建一个表 其中一个单元格包含数据列表 下面是片段 CustomTag phone form class PhoneForm extends PolymerElement observable List
  • CameraX 多个后置摄像头

    我正在尝试使用 CameraX 实现自定义相机应用程序 鉴于现在很多新设备都有多个后置摄像头 我也想将其包括在内 所以基本上 用户可以选择使用哪个相机 我已使用 addCameraFilter 选项尝试了以下操作 val cameraSel
  • 在 Android 项目中使用“compileOnly”范围?

    我在项目中使用 Gradle 2 12 或更高版本 以及适当版本的 Android Gradle 插件 Gradle 2 12 引入了compileOnly配置 那么为什么当我尝试使用它时会出现错误呢 找不到参数的compileOnly 方
  • 为什么 mongodump 不备份索引?

    在阅读 mongodump 文档时 我发现了此信息 mongodump 在其备份数据中仅捕获数据库中的文档 不包含索引数据 mongorestore 或 mongod 必须在恢复数据后重建索引 考虑到索引也是数据库难题的关键部分 并且它们需
  • XmlAttribute 不适用于 XmlArray

    我在使用 XmlSerializer 生成以下 XML 结构时遇到问题
  • 动画窗口调整大小内容重新排列

    我看到许多主题 当调整窗口大小时 它会重新排列内容并带有轻微的动画 例如http wpexplorer me demo php theme pronto http wpexplorer me demo php theme pronto 如果
  • aws kinesis get-records 返回空数组

    我正在玩 Kinesis 我尝试了一个非常简单的示例 我先放一个样本记录 aws kinesis put records records Data Test data hemant PartitionKey 20150421 stream
  • 使用 O(n) 运行时查找范围内的元素

    我正在尝试编写一个函数 从用户接收一个大小为 N 的数组 其值在0 gt N 1之间 如果所有值在0 gt N之间 该函数应该返回 1 1 是否存在 否则返回 0 我们可以假设用户输入的数字只是有效值 0 gt N 1之间 示例 N 5 值
  • Spring:web.xml 中的命名空间与 contextConfigLocation 初始化参数

    我正在阅读 Spring MVC 的文档 并且有一个关于 init 参数的问题 如果有必要的话 我正在使用 Spring 3 2 contextConfigLocation 和命名空间有什么区别 contextConfigLocation
  • 当还必须切换用户时使用 JSch 到 SFTP

    我在 Java 客户端中使用 JSch 连接到远程服务器并使用 SFTP 获取一些文件 以下代码对我来说运行良好 JSch ssh new JSch JSch setConfig FileTransferConstants STRICT H
  • MOTODEV 比 Android 模拟器更快吗?

    我在 VMWare 中的 Windows XP VM 中运行 Android SDK 因此 Android 模拟器需要很长时间才能启动 我最近听说了另一个模拟器 MotoDev 对于那些尝试过这两种方法的人来说 你能告诉我 MotoDev
  • android sdk eclipse,三星 Galaxy Tab 2,如何识别设备

    我正在尝试使用 eclipse 和 android sdk 在 Samsung Galaxy Tab 2 上进行开发 我已经安装了 Samsung Kies 并在我的设备上打开了 USB 调试 看起来 eclipse 不知道新的三星驱动程序
  • rspec 中的相关测试

    我编写功能测试 并且我需要进行的测试取决于之前测试的通过情况 假设我有一个按钮 可以打开一个窗口 其中有一个功能 也就是说 为了检查此功能 我需要首先检查按钮的正确操作 即打开窗口或不起作用 因此 我需要这样做 如果单击按钮时测试失败 则测