Ruby on rails 在规范中使用descripe/it优于功能/场景?(除了语法糖)

Ruby on rails 在规范中使用descripe/it优于功能/场景?(除了语法糖),ruby-on-rails,ruby,rspec,testng,acceptance-testing,Ruby On Rails,Ruby,Rspec,Testng,Acceptance Testing,Ruby 1.9.3、Rails 3.1.10、RSpec 2.13.0、Capybara 2.2.1 我正在为Rails 3应用程序编写测试——一个供客户(和管理员)配置各种手机设置的GUI。我已经写了6个左右的规范文件,还有很多以前写过的文件(我用它们作为模板)。下面是规范文件的快照 # spec/features/admin/administrators_spec.rb require 'spec_helper' include AdministratorHelper include He

Ruby 1.9.3、Rails 3.1.10、RSpec 2.13.0、Capybara 2.2.1

我正在为Rails 3应用程序编写测试——一个供客户(和管理员)配置各种手机设置的GUI。我已经写了6个左右的规范文件,还有很多以前写过的文件(我用它们作为模板)。下面是规范文件的快照

# spec/features/admin/administrators_spec.rb
require 'spec_helper'
include AdministratorHelper
include Helpers
feature "Exercise Administrators page"
  include_context "shared admin context"
  background do
    visit administrators_path
  end
  scenario "show index page" do
    title.should == "Administrators"
  end
  # ... other happy path tests
  # SAD PATH TESTS #
  scenario "validation: delete no administrators", js:true do
    click_button "Delete"
    page.driver.accept_js_confirms!
    error_message("Error: You did not select any administrators for deletion.")
  end
end
据我所知,
功能
/
场景
是水豚独有的。。。和验收测试。其他合作者说,我们的“验收测试”测试一切——数据库是否保存了条目,视图是否正确呈现,等等。每个规范都与GUI中的一个页面相关联,而不是通过模型/控制器

他让我上了一门关于edX(CS169.1x)的课程,他们以不同的方式教授测试——每个型号和控制器都有单独的规范文件。他们还使用了
descripe
/
context
/
it
编写测试的方法

  • 使用
    description
    /
    it
    编写测试比使用
    功能
    /
    场景
    有什么好处吗?(除了语法糖)
  • 通过使用Capybara的
    功能
    /
    场景
    ,它会降低测试套件的速度吗?(与使用RSpec的关键字相比)
  • 我正在编写的测试是什么(如代码块中所述)?接受,单位,组合
  • 仅编写上述测试就可以获得更高的覆盖率吗?(我们的下一个目标是>80%)

  • 谢谢您的帮助和澄清。

    我认为这个问题有点宽泛,但可以根据我的经验提出一些建议和意见来回答

  • 使用descripe/it编写测试比使用特性/场景有什么优势吗?(除了语法糖)
  • 据我所知不是这样。然而,您可能会发现一些方便的测试框架特性在一种方案中比在另一种方案中更容易实现

  • 通过使用Capybara的特性/场景,它是否会降低测试套件的速度?(与使用RSpec的关键字相比)
  • 仅仅使用关键字并不是影响处理速度的主要因素。您使用哪种web驱动程序和主机模拟将产生更大的影响

  • 我正在编写的测试是什么(如代码块中所述)?接受,单位,组合
  • 我称之为验收测试。然而,并不总是有一条清晰的分界线,您需要了解测试将如何运行,以及它们将如何在您的开发过程中使用

    一个成熟的开发管道可能有两个或三个用于不同目的的独立测试套件,并且可能使用不同的测试框架实现。例如,您可能希望实现一组非常快速的测试(通常是单元测试),以作为新代码提交的快速自动测试运行

  • 仅编写上述测试就可以获得更高的覆盖率吗?(我们的下一个目标是>80%)
  • 这些测试可以执行应用程序的任何用户可访问的功能,您自己执行的任何代码都可以被视为包含在内。如果您没有太多用户无法访问的实用程序脚本或其他代码,您可能会获得高于80%的C0覆盖率(Ruby覆盖率工具通常不会提供更深入的细节,如C1)


    我怀疑使用特定测试框架的关键字将产生最小的影响。但是,使用Capybara通过web界面对应用程序进行验收测试要比运行单个模块的低级单元测试慢得多


    测试的速度可以变化几个数量级。对于快速模块周围的紧密单元测试,我可能希望每秒运行100个示例。在一个web开发项目中,我通常在单元测试中每秒运行10-20个示例,但在验收测试中可能每秒运行1个示例(这大概是您在这里得到的大概值)。当在站点的托管副本上通过浏览器驱动程序使用Capybara时,我可能希望在10秒内运行一个示例,因此一个包含100多个测试的套件必须仅针对关键路径测试运行,例如与候选版本的对比。

    这是一个经过深思熟虑的问题,但它有点宽泛,也要取决于意见。测试类型的定义有点模糊。我试图重新表述我的问题。我希望它不那么主观。我的理由是,可能因为水豚是RSpec之上的一个库,所以处理它需要更长的时间。(不知道还要多长时间……我们目前15分钟就有535个示例)非常感谢!你的回答比我想象的要深刻得多。我现在只在Rails方面工作了3个月,所以一些概念对我来说还是新的。我信任其他合作者,因为我们确实测试了应用程序的所有方面。。。我问这个问题的主要原因是因为在WebMock的研究过程中,所有的RSpec测试都遵循了descripe/it,这让我觉得有更大的区别。。。再次感谢你