参考 源自Ruby迷
>>原文链接地址:RSpec 2 on Rails 3入门
BDD(Behavior Driven Development)行为驱动开发现在很火,因此RSpec也非常流行。
RSpec是一个基于Ruby的BDD行为测试框架,在Rails中,很多人用它来代替默认的测试框架Test::Unit。
这是一篇RSpec入门文章。
一、创建项目
#创建项目,不生成Test:Unit测试代码
rails new rspec_demo --skip-test-unit
二、在Rails中加入RSpec-Rails
1、修改Gemfile
gem 'rspec-rails', :group => [:development, :test]
2、安装Gem
bundle install
3、生成RSpec框架代码
rails generate rspec:install
会自动创建下面文件:
.rspec – 用于配置 rspec 命令行的配置文件,默认包含 – colour 来启用RSpec输出文字高亮。
spec – 该目录用于存放所有模型变量,控制器,视图,和项目中其它的specs。
spec/spec_helper.rb – 该文件会在每个spec执行时被调用。该文件设置了测试变量,并包含项目级别RSpec配置项,加载引用文件等等。
三、创建用于测试的Model
rails generate scaffold Post title:string context:text
会生成如下文件:
#创建model的测试
create spec/models/post_spec.rb
#创建controller的测试
create spec/contollers/posts_controller_spec.rb
#创建view的测试
create spec/views/posts/edit.html.erb_spec.rb
create spec/views/posts/index.html.erb_spec.rb
create spec/views/posts/new.html.erb_spec.rb
create spec/views/posts/show.html.erb_spec.rb
#创建helper的测试
create spec/helpers/posts_helper_spec.rb
#创建route的测试
create spec/routing/posts_routing_spec.rb
#创建请求的测试
create spec/requests/posts_spec.rb
rake db:migrate
生成数据库
常用的RSpec相关命令:
rake spec #执行所有测试
rake spec:models #只执行models的测试
rake spec/models/mymodel_spec.rb # 只测试一个文件
四、自己写测试
与TDD类似,步骤如下:写测试–>执行测试出错–>写代码–>通过测试
1、写测试
# spec/models/post_spec.rb
require 'spec_helper'
describe Post do
before(:each) { @post = Post.new }
subject { @post }
it { should be_a_kind_of ActiveRecord::Base }
context "when title is blank" do
before { @post.title = "" and @post.save }
subject { @post }
it { should have(1).errors_on(:title) }
end
context "when title is not blank" do
before { @post.title = "rubyer.me" and @post.save }
subject { @post }
it { should have(0).errors_on(:title) }
end
end
执行测试
rspec spec/models/post_spec.rb #Finished in 24.88 seconds #3 examples, 1 failures, 2 passed
修改代码
class Post < ActiveRecord::Base
validates_presence_of :title
end
再次执行测试
rspec spec/models/post_spec.rb #3 examples, 0 failures, 3 passed
测试通过,Use RSpec, Be Happy!