Welcome

首页 / 软件开发 / 数据结构与算法 / Rails测试《七》实战功能测试functional test

Rails测试《七》实战功能测试functional test2014-03-15之前我们介绍过,rails的功能测试针对的是controller,测试controller的action是否正确的执行。

测试的内容主要是:

测试请求是否正确。

测试用户是否跳转到正确的页面。

测试用户是否验证成功。

测试响应中是否包含了正确的对象。

测试在view中是否给用户显示了适当的信息。

常用的断言函数

1.assert_response(type, message = nil)

断言响应是否成功,是否是指定的状态码。

assert_response :success代表200,assert_response :redirect代表300-399,assert_response :missing代表404,assert_response :error代表500-599。

assert_response :success

assert_response(200)

2.assert_redirected_to(options = {}, message=nil)

验证跳转是否正确,是否跳转到指定的controller的action。

assert_redirected_to(:controller => "posts", :action => "index")

assert_redirected_to(:controller => "posts", :action => "show")

3.assert_template(expected = nil, message=nil)

断言请求是否呈现了正确的页面。

assert_template "new"

是否呈现了new页面。 assert_template :partial => "_customer", :locals => { :customer => @customer }

是否呈现了customer这个partial,并且加载了变量@customer

assert_template :partial => false 是否没有呈现任何的partial。

4.assert_tag  

断言响应的body中是否了指定条件的tag标签。

assert_tag :tag => "div", :attributes => { :id => "div-header" }验证响应的body中是否包含id=d"iv-header"的div标签。

5.assert_no_tag

和assert_tag相反,断言响应的body中是否不包含指定条件的tag。

6.assert_routing

断言route映射是否正确。

def test_should_route_from_signout_to_destroy assert_routing( {:path =>"signout", :method => :delete} , {:controller =>"sessions", :action =>"destroy", :method => :delete} ) end
7.assert_select

断言view中的tag。

assert_select "form"

assert_select "title", "Welcome to my site!"

示例

我们还是拿我的blog项目做示例。

下面是针对sessionscontroller的new这个action的两个简单测试,测试这个action是否返回成功,并且加载了变量user。

require "test_helper" class SessionsControllerTest < ActionController::TestCase include FactoryGirl::Syntax::Methodsdef test_should_be_get_new get :newassert_response :success assert_not_nil assigns(@user) enddef test_should_be_get_new_status_code get :newassert_response(200)assert_not_nil assigns(:user) end end