程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Ruby on rails開發從頭來(windows)(二十三)-功能測試的約定

Ruby on rails開發從頭來(windows)(二十三)-功能測試的約定

編輯:關於JAVA

上篇隨筆裡測試了login_controller,我們使用了很多rails內建的斷言和get,put等方法來進行測試。這次來看看rails在功能測試方面的一些約定。

1.HTTP請求的方法(HTTP request method)

下面的方法用來模擬HTTP請求並得到一個回應(response)

get()
put()
post()
delete()
head()

這五個函數每一個都有同樣的四個參數,以get()為例:

get(action, parameters = nil, session = nil, flash = nil)

向指定的Action發出一個HTTP GET請求,並且設定Response,四個參數的含義分別為:

action:HTTP請求所指定的某個控制器(controller)的一個Action。

Parameters:可選的Hash,作為request的參數。

Session:可選的,Session的Hash。

Flash:可選的,flash的Hash。

下面是例子:

get :index
get :add_to_cart, :id => @version_control_book.id
get :add_to_cart, :id => @version_control_book.id,
:session_key => 'session_value', :message => "Success!"

2.斷言(assertion)

除了有Test:Unit提供的一些基本的斷言(assertion),功能測試還可以在執行請求後使用一些自定義的斷言。例如下面的:

l  assert_response(type, message=nil)

判斷得到的HTTP響應是一個數字型的狀態值或者下面列舉的標記,這些標記覆蓋了HTTP響應值,例如:redirect對應300-399。

:success
:redirect
:missing
:error

例子:

assert_response :success
assert_response 200

l  assert_redirected_to(options = {}, message=nil)

判斷最後一個請求的Action是否被重定向到其他的controller,action或頁面,例如:

assert_redirected_to :controller => 'login'

assert_redirected_to :controller => 'login', :action => 'index'

assert_redirected_to "http://my.host/index.html"

l  assert_template(expected=nil, message=nil)

判斷一個請求是否使用了指定的template來描畫(render)

例如:

assert_template 'store/index'

l  assert_tag(conditions)

判斷在一個響應的body內是否有符合指定條件的tag,條件的參數必須是下面的keys中的一個或多個。

:tag,節點的類型

assert_tag :tag => 'html'

:content,判斷節點的content的值

assert_tag :content => "Pragprog Books Online Store"

:attributes,一組條件,用來判斷節點的屬性

assert_tag :tag => "div", :attributes => { :class => "fieldWithErrors" }

:parent,一組條件,判斷節點的父節點

assert_tag :tag => "head", :parent => { :tag => "html" }

:child,一組條件,判斷當前節點的最近的一個直屬的child

assert_tag :tag => "html", :child => { :tag => "head" }

:ancestor,一組條件,判斷當前節點的最近的一個祖先

assert_tag :tag => "div", :ancestor => { :tag => "html" }

:descendant,一組條件,判斷當前節點的最近的一個子孫

assert_tag :tag => "html", :descendant => { :tag => "div" }

:children,一組條件,判斷節點的children的數量,使用下面的key中的任意一個或一組

:count,一個數字或一個范圍,指定要match的children的編號。

:less_than,children的編號必須小於指定的數字。

:greater_than,children的編號必須大於指定的數字。

:only,當計算children的數量是使用的一組條件。

例子:

assert_tag :tag => "ul",:children => { :count => 1..3,:only => { :tag => "li" } }

更多的斷言參考:http://api.rubyonrails.com/classes/Test/Unit/Assertions.html.

3.變量

當一個請求(request)被執行,可以依靠下面的變量來進行斷言。

l  assigns(key=nil)

由最後一個action賦值的實例變量。

assert_not_nil assigns["items"]

assigns必須被指定一個字符串作為索引,但是上面的assert_not_nil assigns["items"]卻不會起作用,因為items是一個關鍵字,可以使用一方法調用來代替:

assert_not_nil assigns(:items)

l  session

session的一個hash對象:

assert_equal 2, session[:cart].items

l  flash

在session裡存放的flash的hash對象

assert_equal "Danger!", flash[:notice]

l  cookies

用戶使用的cookies的hash對象。

assert_equal "Fred", cookies[:name]

l  redirect_to_url

上一個action重定向的完整的url

assert_equal "http://test.host/login", redirect_to_url

OK,這次就到這裡,下次繼續會到controller的測試。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved