Ruby on rails 什么';RSpec和黄瓜有什么区别?

Ruby on rails 什么';RSpec和黄瓜有什么区别?,ruby-on-rails,testing,rspec,tdd,cucumber,Ruby On Rails,Testing,Rspec,Tdd,Cucumber,我有6个月的Rails开发经验。我已经构建了一个web应用程序,它现在与身份验证和授权以及postgresql数据库一起使用 我将继续介绍我的第二个Rails应用程序,但这次,在吸取教训之后,我想使用TDD开发它,因为我注意到它更容易扩展和修复bug。它发展缓慢,但从长远来看,它更容易处理 我听说过Rspec和Cucumber,但我完全被它们搞糊涂了 我想知道RSpec和Cucumber之间的区别以及它们的用途 从初学者(也是唯一的开发人员)的角度来看,了解是否真的需要测试框架也是很有用的。RS

我有6个月的Rails开发经验。我已经构建了一个web应用程序,它现在与身份验证和授权以及postgresql数据库一起使用

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

我听说过Rspec和Cucumber,但我完全被它们搞糊涂了

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


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

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

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

RSpec和Cucumber的主要区别在于业务可读性因素。Cucumber的主要优点是规范(特性)与测试代码是分开的,因此您的产品所有者可以提供或查看规范,而无需深入挖掘代码。这些是您在Cucumber中创建的.feature文件。RSpec有一个类似的机制,但是您可以使用包含业务规范的descripe、Context或It块来描述一个步骤,然后立即生成执行该语句的代码。这种方法对于开发人员来说稍微容易一点,但是对于非技术人员来说稍微难一点

用哪一个?如果您是唯一的开发人员和产品所有者,那么我会坚持使用RSpec,我觉得它更容易让技术人员理解,在保持范围和控制方面提供了一些优势,并且避免您在测试步骤中与RegExs发生冲突。如果您是为客户构建这个,并且他们在规范方面是亲身实践的,那么就使用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
Rspec


本系列非常适合RSpec。

更让您困惑的是,Minitest也可以是一个选项Capybara是一个可以在任何测试框架中使用的驱动程序,而不是框架本身。Watir webdriver和Selenium是两个功能相似的东西,但它们驱动的是真正的浏览器,并且比Capybara驱动的Rack::Test慢得多。这是一个很好的问题,也是一个很好的答案。这正是我需要的。我对这个问题以非建设性的方式结束感到困惑。谁在乎它是否会引起争论?这就是社区投票的目的。投票重新开始,因为我认为结束这个问题的基础是似是而非的。它肯定可以(而且已经!)用“事实、参考资料或专业知识”来回答,任何问题都可能“很可能引发辩论、争论和投票”(我们都知道也看到过)。至于“投票”?世卫组织SO的运作方式是关于向上投票和向下投票的问题和答案。这基本上是一个大调查。关闭这个是愚蠢的。这是一个很好的有帮助的主题问答。这是一个很好的答案。非常感谢您的时间和建议。我读过很多关于rails的书,但到目前为止还没有找到一本能够做出这种区分并解释哪个是哪个的书。谢谢,阿加尼不能向任何有需要的人推荐这个答案。谢谢你提供的细节!这确实是关于stackoverflow的最全面、最容易理解的答案之一(附带一个很好的例子!)
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