ruby-on-rails - RSpec 和 Cucumber 有什么区别?

标签 ruby-on-rails testing rspec tdd cucumber

<分区>

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

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

我听说过 Rspec 和 Cucumber,但对它们一头雾水。

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

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

最佳答案

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

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

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

使用哪个?如果您是唯一的开发人员和产品所有者,那么我会坚持使用 RSpec,我觉得它对技术人员来说更容易理解,在保持范围和控制方面提供了一些优势,并且让您不必为了测试而乱用 RegEx脚步。如果您正在为客户构建这个,并且他们亲身实践了规范,请使用 Cucumber 进行验收测试并使用 RSpec 进行单元测试。

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

cucumber :

#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

R规范

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。

关于ruby-on-rails - RSpec 和 Cucumber 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11762245/

相关文章:

ruby-on-rails - 如何让服务器端 faye 客户端在我的 Rails 应用程序中运行?

css - Bootstrap Nav-List 对齐/浏览器兼容性

ruby-on-rails - 为什么方法 column_types 在 Rails 5.0 中未定义?

ruby-on-rails - Minitest 和 Rspec

ruby-on-rails - 组合多维数组的第一个元素

ruby-on-rails - 子目录中的 Rails 应用程序

java - Mockito 模拟对象返回 null

user-interface - 主要使用 Tcl/Tk 编写的应用程序的 GUI 测试

python - 使用 Nose 进行测试的著名 Python 项目

ruby-on-rails-3 - 使用 fixture 加载数据进行手动测试