RSpec 和 Cucumber 有啥区别? [关闭]
Posted
技术标签:
【中文标题】RSpec 和 Cucumber 有啥区别? [关闭]【英文标题】:What's the difference between RSpec and Cucumber? [closed]RSpec 和 Cucumber 有什么区别? [关闭] 【发布时间】:2012-07-30 12:37:37 【问题描述】:我有 6 个月的 Rails 开发经验。我已经构建了一个正在使用的 Web 应用程序,其中包含身份验证和授权以及 postgresql db。
我正在继续我的第二个 Rails 应用程序,但这次,在吸取教训之后,我想使用 TDD 开发它,因为我发现它更容易扩展和修复错误。它的开发速度很慢,但从长远来看,它更容易处理。
我听说过 Rspec 和 Cucumber,但完全被他们搞糊涂了。
我想知道RSpec和Cucumber有什么区别以及它们的用途。
从初学者(也是唯一的开发者)的角度了解是否真的需要测试框架也很有用。
【问题讨论】:
为了让你更加困惑,Minitest 也可以是一个选项 Capybara 确实是一个可以在任何测试框架中使用的驱动程序,而不是一个框架本身。 Watir-webdriver 和 Selenium 是做类似功能的两个东西,但是驱动一个真正的浏览器并且比 Capybara 驱动 Rack::Test 慢得多 这怎么没有建设性??? 好问题和好答案。这正是我所需要的。我对这个问题的结束感到困惑,因为它没有建设性。谁在乎它是否会引起辩论?这就是社区投票的目的。 投票重新开放,因为我认为关闭问题的基础是似是而非的。它肯定可以(并且已经!)使用“事实、参考资料或专业知识支持”来回答,并且 任何 *** 问题都可能“可能会引发辩论、争论、投票”(我们都知道并且见过)。至于“投票”? SO的谁的作案手法是关于赞成和反对问题和答案。这基本上是一项大型民意调查。关闭这是愚蠢的。这是一个很有帮助的主题问答。 【参考方案1】:RSpec 和 Cucumber 都是测试框架。 RSpec 包括传统的单元测试(这意味着测试一个类或应用程序的一部分与应用程序的其余部分隔离。所以你的模型做你的模型应该做的事情,控制器做它应该做的事情,等等)。
RSpec 和 Cucumber 都用于验收测试(称为 ATDD、BDD、Specification by Example 等,具体取决于您询问的对象)。这些是业务案例驱动的集成测试,这意味着它们模拟用户使用应用程序的方式并使用完整的 Rails 堆栈,因此可以通过单元测试不会发现应用程序不同部分协同工作方式的问题找到。
RSpec 和 Cucumber 的主要区别在于业务可读性因素。 Cucumber 的主要吸引力在于规范(功能)与测试代码是分开的,因此您的产品所有者可以提供或审查规范,而无需深入研究代码。这些是您在 Cucumber 中制作的 .feature 文件。 RSpec 具有类似的机制,但是您使用包含业务规范的 Describe、Context 或 It 块来描述步骤,然后立即拥有执行该语句的代码。这种方法对开发人员来说更容易使用,但对非技术人员来说更难。
使用哪个?如果您是唯一的开发人员和产品所有者,那么我会坚持使用 RSpec,我觉得它对技术人员来说更容易理解,在保持范围和控制方面提供了一些优势,并且让您避免使用 RegEx 进行测试脚步。如果您是为客户构建它,并且他们在规范方面亲自动手,请使用 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。
【讨论】:
以上是关于RSpec 和 Cucumber 有啥区别? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
RSpec 的 subject 和 let 有啥区别?啥时候应该使用它们?
RSpec vs Cucumber(RSpec 故事)[关闭]