RSpec和Cucumber有什么区别?[关闭]


114

我有6个月的Rails开发经验。我已经构建了一个Web应用程序,该应用程序现在已通过身份验证和授权以及postgresql db使用。

我将继续使用我的第二个Rails应用程序,但是这次,在吸取了教训之后,我想使用TDD进行开发,因为我注意到它更易于扩展和修复错误。它发展缓慢,但从长远来看,它更容易处理。

我听说过Rspec和Cucumber,但被它们彻底弄糊涂了。

我想知道RSpec和Cucumber之间的区别是什么以及它们的用途。

从初学者(也是唯一的开发者)的角度了解是否真的需要测试框架也将很有用。


6
更让您感到困惑的是,也可以选择Minitest
lucas clemente 2012年

5
Capybara实际上是可以在任何测试框架中使用的驱动程序,而不是其本身可以使用的框架。Watir-webdriver和Selenium是两个功能相似的东西,但是它们驱动一个真正的浏览器,并且比Capybara驱动Rack :: Test
DVG

37
这怎么不是建设性的???
杰森·斯威特

19
好问题,好答案。这正是我所需要的。我对结束该问题没有建设性感到困惑。谁在乎是否要引起辩论?这就是社区投票的目的。
dpurrington

14
我认为重新投票的理由是不切实际的,因为我认为解决这一问题的依据是怀疑的。肯定可以(并且已经被!)使用“事实,参考或专业知识支持”来回答,并且任何 StackOverflow问题都可能“很可能会引起辩论,争论和投票”(我们都知道并且已经看到)。至于“轮询”?SO的作案手法是关于提高和降低问题和答案。这基本上是一项大调查。关闭这个很愚蠢。这对主题问答很有帮助。
亚当·卡梅隆

Answers:


323

RSpec和Cucumber都是测试框架。RSpec包括传统的单元测试(这意味着与应用程序的其余部分隔离地测试应用程序的类或部分。因此,您的模型可以执行模型应执行的操作,控制器可以执行应执行的操作,等等)。

RSpec和Cucumber都用于验收测试(根据您的要求,这称为ATDD,BDD,“示例规范”等)。这些是业务案例驱动的集成测试,这意味着它们可以模拟用户使用应用程序并使用完整的Rails堆栈的方式,因此可以发现应用程序的不同部分协同工作的方式出现问题,而单元测试不会找。

RSpec和Cucumber之间的主要区别是业务可读性因素。Cucumber的主要吸引力在于,规范(功能)与测试代码是分开的,因此您的产品所有者可以提供或查看规范,而无需深入研究代码。这些是您在Cucumber中创建的.feature文件。RSpec具有类似的机制,但是您可以使用包含业务规范的Describe,Context或It块描述步骤,然后立即获得执行该语句的代码。对于开发人员来说,这种方法比较容易一些,但对非技术人员则有点困难。

使用哪个?如果您是唯一的开发人员和产品所有者,那么我会坚持使用RSpec,我认为技术人员更容易理解,在保持范围和控制范围方面提供了一些优势,并且使您免于正则表达式的困扰脚步。如果您是为客户构建的,并且它们是有关规范的动手工具,请与Cucumber一起进行验收测试,并使用RSpec进行单元测试。

只是为了说明两者之间的主要区别:

黄瓜:

#articles.feature
Given an article exists called "Testing Demonstration"
When I visit the list of articles
Then I should see an article called "Testing Demonstration"

#article_steps.rb
Given /^an article exists called "(.+)"$/ do |title|
  FactoryGirl.create(:article, title: title)
end 
When /^I visit the list of articles$/ do
  visit articles_path
end
Then /^I should see an article called "(.+)"$/ do |title|
  page.should have_content title
end

规格

describe "Articles" do
  let(:article) { FactoryGirl.create(:article) }
  context "Index Page" do
    before { visit articles_path }
    it { page.should have_content article.title }
  end
end

博客系列非常适合使用RSpec。


24
这是一个很好的答案。非常感谢您的时间和建议。我已经读了很多关于Rails的书,但是到目前为止,还没有找到能做出这些区分并解释是哪一本书的书。再次感谢
banditKing 2012年

2
我不能向有需要的人推荐这个答案。谢谢你的细节!
Ikon 2012年

3
这确实是关于stackoverflow的最全面,最容易理解的答案之一(完整的例子很不错!)
Sheharyar 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.