RSpec和Cucumber都是测试框架。RSpec包括传统的单元测试(这意味着与应用程序的其余部分隔离地测试应用程序的类或部分。因此,您的模型可以执行模型应执行的操作,控制器可以执行应执行的操作,等等)。
RSpec和Cucumber都用于验收测试(根据您的要求,这称为ATDD,BDD,“示例规范”等)。这些是业务案例驱动的集成测试,这意味着它们可以模拟用户使用应用程序并使用完整的Rails堆栈的方式,因此可以发现应用程序的不同部分协同工作的方式出现问题,而单元测试不会找。
RSpec和Cucumber之间的主要区别是业务可读性因素。Cucumber的主要吸引力在于,规范(功能)与测试代码是分开的,因此您的产品所有者可以提供或查看规范,而无需深入研究代码。这些是您在Cucumber中创建的.feature文件。RSpec具有类似的机制,但是您可以使用包含业务规范的Describe,Context或It块描述步骤,然后立即获得执行该语句的代码。对于开发人员来说,这种方法比较容易一些,但对非技术人员则有点困难。
使用哪个?如果您是唯一的开发人员和产品所有者,那么我会坚持使用RSpec,我认为技术人员更容易理解,在保持范围和控制范围方面提供了一些优势,并且使您免于正则表达式的困扰脚步。如果您是为客户构建的,并且它们是有关规范的动手工具,请与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
规格
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。