Rspec + Factory_girl 搭建测试框架

Posted on 2012-07-14 15:28  bendanchenzhicheng  阅读(1229)  评论(1编辑  收藏  举报


注意:搭建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 使用方法汇总: 

http://rubyer.me/blog/1460/

 

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

 

本文写得不太好,仍会继续维护这份文档,希望大家能少走点弯路

Copyright © 2024 bendanchenzhicheng
Powered by .NET 9.0 on Kubernetes