RSpec 和黄瓜有什么区别?

我有6个月的 Rails 开发经验。我已经构建了一个 Web 应用程序,现在使用的是身份验证、授权和 postgreqldb。

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

我听说过 Rspec 和黄瓜,但完全被它们弄糊涂了。

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

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

35446 次浏览

RSpec 和 Cucumber 都是测试框架。RSpec 包括传统的单元测试(这意味着与应用程序的其余部分隔离测试一个类或应用程序的一部分)。所以你的模型做你的模型应该做的事情,控制器做它应该做的事情,等等)。

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

RSpec 和 Cucumber 的主要区别在于商业可读性因素。黄瓜的主要特点是规范(特性)与测试代码是独立的,因此您的产品所有者可以提供或检查规范,而不必深入挖掘代码。这些是。你在黄瓜中制作的特性文件。RSpec 具有类似的机制,但是您可以使用包含业务规范的描述、上下文或 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

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

这个 blog系列在 RSpec 方面非常出色。