码迷,mamicode.com
首页 > 其他好文 > 详细

RSpec控制器测试基础

时间:2015-04-10 13:47:15      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

(1)FactoryGirl.attributes_for(:contact)生成hash

(2)assigns(:variable_name)方法,可以理解为接受action处理后放回的@variable_name赋值给一个局部变量

(3)控制器测试的关键点:

        (1)测试GET请求的动作(index、show、new、edit):返回值是否是我们期待的(expect(assigns(:variable_name)).to eq variable,当返回值是一个数组并且不要求数组顺序时用match_array(array),要求顺序用eq;期待返回是一个新对象可以用be_a_new(Class));渲染的页面是不是我们期待的(expect(response).to render_template :action);例:

describe ‘GET #show‘ do
    it ‘assigns the requested contact to @contact‘ do
        contact = create(:contact)  #FactoryGirl.create(:contact)缩略形式
        get :show, id: contact
        expect(assigns(:contact)).to eq contact
    end
    it ‘renders the :show template‘ do
        contact = create(:contact)
        get :show, id: contact
        expect(response).to render_template :show
    end
end

        (2)测试POST请求(create):和GET请求思路相似,只是参数需要Hash,需要使用attributes_for(),还需要分为参数合法以及不合法两种情况,create成功期待数据条数变化,例:

expect{
    post :create, contact: attributes_for(:contact)
}.to change(Contact, :count).by(1)

将HTTP请求放入expect块中,是为了延迟执行,检测的值会在请求执行前后执行两次,来验证变化

        (3)测试PATCH请求(update):分为参数合法与不合法两种情况,分别验证返回数据是否有,以及是否修改成功,以及渲染的模板;

        (4)测试DELETE请求(destroy):change(Class, :count).by(-1),redirect_to 

        (5)测试非CRUD动作:有返回值验证返回值,或验证数据条数变化;验证render页面

        (6)测试不输出HTML的控制器:可以验证响应头的Content-Type(expect(response.headers[‘Content-Type‘]).to have_content ‘text/csv‘);可以验证相应体是否含有特定的内容(expect(response.body).to have_content ‘‘);have_content是Capybara提供的方法,也可以使用rails-rspec提供的match()参数为正则表达式


RSpec控制器测试基础

标签:

原文地址:http://my.oschina.net/u/1413049/blog/398480

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!