注意:搭建rspec之前,要确保项目里database.yml对测试数据库的配置,即是test环境下数据库的配置
同时,本人已经把devise搭建好了,我的博客中也有对于devise搭建的博文,大家可以去看看
本人在创建这个demo时还犯了一个错,就是rake这个gem没装,这个demo用的是0.8.7版本的rake
gem 'rake', '~>0.8.7'
一、安装Rspec
Rspec是一种ruby语言的测试工具,源于warden
1.在gemfile中添加
gem "rspec-rails", "~> 2.11.0" (目前最新版本为2.11.0)
2.执行bundle install
3.初始化Rspec
rails generate rspec:install
执行 rake -T ,可以找到命名空间spec下的所有命令
二、安装Factory_girl
Factory_girl简介
factory_girl是专门用来构造模拟数据的,完美替代Fixture的工具
Fixture的缺点很明显,经常要处理各种关联和依赖。如果测试要求的数据量大,还要自己手动制造数据。
这些在Factory Girl中都有了好的解决。生成大量数据可以用association来解决对象间的关联,sequence来解决生成大量测试数据的问题
1.在gemfile中添加
gem "factory_girl_rails", "~>3.5.0" (目前最新版本为3.5.0)
2.执行bundle install
Github:https://github.com/thoughtbot/factory_girl_rails
Factory Girl 使用方法汇总:
group :development, :test do
gem "rspec-rails", "~> 2.11.0"
gem "factory_girl_rails", "~>3.5.0"
end
三、让devise支持Rspec测试
在接下来的测试需要添加devise测试支持,否则,所有的controller的方法都没法访问
添加文件: ./spec/support/devise.rb,插入以下代码:
RSpec.configure do |config| config.include Devise::TestHelpers, :type => :controller end
Now you are ready to use the sign_in
and sign_out
methods. Such methods have the same signature as in controllers:
sign_in :user, @user# sign_in(scope, resource)、
sign_in @user# sign_in(resource)
sign_out :user# sign_out(scope)
sign_out @user# sign_out(resource)
四、测试数据的准备
添加文件夹./spec/factories
添加文件user.rb,添加以下内容
# -*- encoding : utf-8 -*-
FactoryGirl.define do
factory :user do
email '123456789@qq.com'
password '123456'
password_confirmation '123456'
end
end
五、功能性测试
添加文件./spec/contorller/user_controller_spec.rb
添加以下内容
# -*- encoding : utf-8 -*-
require "spec_helper"
describe HomeController do
before(:each) do #每次请求之前都先登录,不然会被devise拒绝
@user=FactoryGirl.create(:user)
sign_in @user
end
describe "GET index" do
it "shoule be successful" do
get 'index'
response.should be_success
end
end
end
以上是测试描述语言,要详细学学,内容并不多
六、测试
执行: rake spec:controllers
效果:
(in /home/aaron/code/devise_demo)
/home/aaron/.rvm/rubies/ruby-1.9.2-p290/bin/ruby -S rspec ./spec/controllers/user_controller_spec.rb
.
Finished in 0.30821 seconds
1 example, 0 failures
Randomized with seed 27530
七.Rspec加载环境,运行的原理
目前本人的理解:
大家可以看看./spec/spec_helper.rb,可以看到Rspec先去加载rails项目的environment环境配置
然后去加载./spec/support文件下的配置
刚刚我们在./spec/controllers的文件下用sign_in先进行登录,就要先在./spec/support/devise.rb先把devise引进来,
不然就用不了devise方法。
另外,Rspec还会去加载其它的配置。
接下来对respec的理解,本人仍会更新这份文档
说明:这是我研究了两天多的东西,说实话,刚开始搞得糊里糊涂,因为团队队友已经有去研究,所以自己也去研究研究,要把测试搞起来,
下一步将研究自动化测试,添加spork和autotest
本文写得不太好,仍会继续维护这份文档,希望大家能少走点弯路