zoukankan      html  css  js  c++  java
  • Rspec + Factory_girl 搭建测试框架


    注意:搭建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

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

  • 相关阅读:
    "Java:comp/env/"讲解与JNDI
    table的td去边框
    jsp获取所有参数
    spring-mvc设置首页
    jdbc数据库连接方式
    文件上传
    SMBMS
    过滤器和监听器
    解决Maven的JDK版本问题
    MVC
  • 原文地址:https://www.cnblogs.com/bendanchenzhicheng/p/2591534.html
Copyright © 2011-2022 走看看