RSpec和Cucumber有什么区别?

我有6个月的Rails开发经验。 我已经构build了一个Web应用程序,现在正在使用身份validation和授权和postgresql数据库。

我正在转向我的第二个Rails应用程序,但是这一次,经过学习,我想用TDD来开发它,因为我发现它更容易扩展和修复错误。 发展缓慢,但从长远来看更容易处理。

我听说过Rspec和黄瓜,但他们完全困惑。

我想知道RSpec和黄瓜之间有什么不同,以及它们的用途。

从初学者(谁也是唯一的开发者)的angular度来看,确定是否真的需要testing框架也是有用的。

RSpec和Cucumber都是testing框架。 RSpec包含了传统的unit testing(这意味着应用程序与应用程序的其余部分隔离地进行testing),所以你的模型可以完成你的模型应该做的事情,控制器做它应该做的事情等等。

RSpec和Cucumber都用于验收testing(根据您的要求,这称为ATDD,BDD,示例说明等)。 这些都是业务案例驱动的集成testing,这意味着它们模拟用户使用应用程序的方式,并使用完整的Rails堆栈,因此可以通过unit testing的方式find应用程序不同部分协同工作的问题找。

RSpec和黄瓜的主要区别在于商业可读性因素。 黄瓜的主要吸引力在于规格(特征)与testing代码是分开的,所以您的产品所有者可以提供或查看规格,而不必深入代码。 这些是你在黄瓜制作的.feature文件。 RSpec有一个类似的机制,但是用一个Describe,Context或It块来描述一个包含业务规范的步骤,然后立即拥有执行该语句的代码。 这种方法对于开发人员来说要容易一些,对于非技术人员则要稍微难一些。

使用哪个? 如果您是唯一的开发人员和产品所有者,那么我会坚持使用RSpec,我觉得技术人员更容易理解,在保持范围和控制方面提供了一些优势,并使您免于使用RegEx来进行testing脚步。 如果您正在为客户构build这个模型,并且他们在规范方面进行实际操作,请与Cucumber进行验收testing,并使用RSpec进行unit testing。

只是为了展示两者之间的主要区别:

黄瓜:

#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的

 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: http : //everydayrails.com/2012/03/12/testing-series-intro.html