关于ruby on rails测试的一些笔记

这里的rails测试主要用到了以下技术,rspec, simplecovh和factory,simplecov是用来检测测试代码对被测试代码覆盖的工具,factory_girl_rails是用来做单元测试的,它可以创建单元测试所需的临时数据,而会将这些临时数据存如数据库。

在初始测试时,应该首先同步测试数据库和开发数据库的表和属性,应用以下命令

 rake db:migrate
 rake db:test:prepare
 rake db:test:load

当然在以后更新测试数据库元素时,可以直接输入以下命令行

‘RAILS_ENV=test bundle exec rake db:migrate’

运行测试的一些命令行:

rspec spec //运行全部测试
rspec spec filepath //运行某个文件
rspec spec filepath -e 'describe name' //运行一个故事,当然还有比较常用的tag

关于测试的一些小结
1. 测试model
测试内容主要是两部分,一个是model里定义的函数,还有一个就是某一个field的要求,比如

class Article < ActiveRecord::Base
  validates :title, presence: true
  def self.get_computer_article
      return where(article_type = 'computer')
  end
end

以上需要确保title总是不为空,get_computer_article可以获取到computer类型的文章

describe 'test model Article' do
    it 'test' do
        article = Article.new
        expect(article.save).to eq(false)
        create(:article,
        article_type:'computer',title:'test1')                   expect(Article.get_computer.first.article_type).to eq('computer')
    end
end 
  1. 测试controller
    controller主要测试以下5个部分:
  2. web request?
//this is for 200 response
expect(response).to be_success
expect(response).to have_http_status(200)
  1. redirect to the right page?
expect(response).to render_template("index")
//或者
expect(response).to redirect_to(test_path(var1,var2))
//对于render :nothing=>true的情况
expect(response).to have_text(" ")
  1. authenticated successfully?
  2. object stored in the template?
expect(assigns(:something).id).to eq(1)
  1. appropriate message show in the view?

以下是几种触发请求事件的方式

//请求方式,函数名,传递的参数
//对应url root/index?some_var=value
get :index, some_var: value 

//对应url root/13/edit?some_var=value
get :edit, {'id' => '13'},{'some_var' => 'value'}

//对应url root/new?some_var=value
get :new, {'some_var' => 'value'}

//当然如果是xhr可以这样写
xhr :get, :edit, {'id' => '13'},{'some_var' => 'value'}

//对应url root/create, other_var可通过form,或者ajax传递过来
post :create {'other_var' => 'value'}

//对应url root/update/13, other_var同上
patch :update, :id=>13, :other_var=>'value' 

此外ruby里有以下集中数据:
assigns:@something, assigns(:something)
cookies, cookies[:person_id]
session, session[:person_id]
flash, flash[:message] flash是function之间传递的参数

  1. 测试helper方法类似
  2. 测试js代码和html
    如果想更好的测试html和js需要用到capybara-webkit,这些会在后边介绍

额外补充一条
allow_any_instance_of(Object).to receive(:function).and_return(somthing)
当使用Object.function时,返回something

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值