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

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

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

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

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

推荐答案

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

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

RSpec和Cucumber的主要区别在于业务可读性因素.Cucumber的主要优点是规范(特性)与测试代码是分开的,因此您的产品所有者可以提供或查看规范,而无需深入挖掘代码.这些是最重要的.用Cucumber制作的功能文件.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

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相关问答推荐

对Rails进行枚举不允许空值

SASS,Rails 7:找不到要导入的样式表

将参数传递给视图中的嵌入操作时遇到问题

根据表单内的 Select 字段值渲染部分内容

删除 aws s3 (rails7) 上的日志(log)文件

创建大哈希的 Ruby 方法

用变量替换 find_or_create_by 中的键

Ruby on Rails/Activerecord 排序自引用查询?

为什么 Rails 执行器不能识别内核的改进?

Rails 7 应用程序 - 引用模型文件时出现未初始化常量错误

如何将动态 Ruby 代码嵌入到 Slim 模板中的javascript部分?

Rails 4.1 Mailer 预览和设计自定义邮箱

Rails 4,使用 ActiveRecord 的原始查询

为什么我要使用 unicorn 或 thin 而不是 WEBrick 用于开发目的?

格式化日期对象以显示人类可读的日期

如何让 ActiveAdmin 使用强参数?

Rails,设计认证,CSRF 问题

如何强制 RSpec 测试失败?

Ruby on Rails:如何在 select_tag 中使用默认占位符?

Rails - 邮件,将正文作为纯文本获取