中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Rails測試《九》集成測試integration test

發布時間:2020-06-27 01:57:07 來源:網絡 閱讀:1577 作者:virusswb 欄目:軟件技術

開場白

今天我們來熟悉一下rails的集成測試integration test。

 

簡介

集成測試主要是測試多個controller之間的交互,以及測試應用中比較重要的工作流程,驗證這些工作流程是否符合預期的設想。

 

不像單元測試和功能測試,是自動添加的。集成測試是需要我們手動添加的,rails提供了一個命令

rails generate integration_test

通過命令就可以在test/integration文件夾創建集成測試。

  1. $ rails generate integration_test user_flows 
  2.       exists  test/integration/ 
  3.       create  test/integration/user_flows_test.rb 

 

我們先來了解一些集成測試中常用的幫助方法。

 

  1. https? 

如果session正在模擬https請求,就返回true。

 

  1. https! 

允許你模擬https請求。

 

  1. host! 

允許你在下一次的請求中設置host name。

 

  1. redirect? 

如果上一次請求是一個跳轉,就返回true。

 

  1. follow_redirect! 

緊跟著一個跳轉的響應

 

  1. request_via_redirect(http_method, path, [parameters], [headers]) 

向指定的path發送http請求,可選parameters,可選headers,然后跟著一個跳轉。

 

  1. post_via_redirect(path, [parameters], [headers]) 

向指定的path發送post請求,可選parameters,可選headers,然后跟著一個跳轉。

 

  1. get_via_redirect(path, [parameters], [headers]) 

向指定的path發送get請求,可選parameters,可選headers,然后跟著一個跳轉。

 

  1. put_via_redirect(path, [parameters], [headers]) 

向指定的path發送put請求,可選parameters,可選headers,然后跟著一個跳轉。

 

  1. delete_via_redirect(path, [parameters], [headers]) 

向指定的path發送delete請求,可選parameters,可選headers,然后跟著一個跳轉。

 

  1. open_session 

開啟一個新的session

 

 

示例

讓我們在創建好的集成測試文件test/integration/user_flows_test.rb中添加一些代碼。

 

  1. require 'test_helper' 
  2.  
  3. class UserFlowsTest < ActionDispatch::IntegrationTest 
  4.   include FactoryGirl::Syntax::Methods 
  5.  
  6.   def test_admin_login_and_browse_posts 
  7.     user = FactoryGirl.create(:user_valid
  8.  
  9.     get "/signin" 
  10.     assert_response(200) 
  11.  
  12.     post_via_redirect("sessions", {:user=>{:email=> user.email, :password => user.password}}) 
  13.     assert_equal "/", path 
  14.     assert_equal "sign in successfully", flash[:notice
  15.  
  16.     get "admin/posts" 
  17.     assert_response(200) 
  18.     assert assigns(:posts
  19.    
  20.   end 
  21.  
  22. end 

上面的代碼中,我們先是在users表中添加了一條記錄。然后訪問signin,然后斷言是否返回200.

然后向sessions提交剛才添加的用戶郵箱和密碼,sessionscontroller是負責驗證用戶信息的controller。然后斷言是否跳轉到了根目錄,是否出現了正確的flash提示信息。

最后訪問admin/posts,斷言是否返回200,并且返回posts變量。

 

上面的測試涉及了多個controller,測試覆蓋從數據庫到controller的調度分配。

 

我們可以同時模擬多個session,并且用extend擴展這些session,創建一些強大的測試用的DSL(Domain-Specific Language 領域描述語言)。

我們把上面的測試改成下面的樣子。

  1. require 'test_helper' 
  2.  
  3. class UserFlowsTest < ActionDispatch::IntegrationTest 
  4.   include FactoryGirl::Syntax::Methods 
  5.  
  6.   def test_admin_login_and_browse_posts 
  7.     user = FactoryGirl.create(:user_valid
  8.     guest = FactoryGirl.create(:user_valid_too
  9.   
  10.     user_session = signin(user) 
  11.     guest_session = signin(guest) 
  12.  
  13.     assert_equal("sign in successfully", user_session.flash[:notice]) 
  14.     assert_equal("sign in successfully", guest_session.flash[:notice]) 
  15.  
  16.     user_session.browse_site 
  17.     guest_session.browse_site 
  18.    
  19.   end 
  20.  
  21.   private 
  22.  
  23.   module CustomDSL 
  24.     def browse_site 
  25.       get "admin/posts" 
  26.       assert_response(200) 
  27.       assert assigns(:posts
  28.     end 
  29.   end 
  30.  
  31.   def signin(user) 
  32.     open_session do |sess| 
  33.       sess.extend(CustomDSL) 
  34.       sess.post_via_redirect("sessions", {:user => {:email => user.email, :password => user.password}}) 
  35.        
  36.     end 
  37.   end 
  38.  
  39. end 

 

什么是DSL(領域描述語言)呢?

我理解就是業務描述語言。我們的應用一般是面向一個行業,或者說面向一個領域的,業務的語言就是領域描述語言。

 

如果能用這個領域的業務語言描述測試過程,那么這個測試就更加貼近業務,具有了很強的溝通能力。也就是說這個測試可以拿來和業務進行溝通,看看是不是他們想要的業務過程。

 

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新化县| 阳曲县| 新兴县| 吴桥县| 苍溪县| 确山县| 于田县| 西盟| 车险| 阿克| 精河县| 印江| 靖远县| 台南市| 长宁县| 高唐县| 伊春市| 武山县| 万盛区| 含山县| 广安市| 宁国市| 布拖县| 肃宁县| 上蔡县| 宜兰县| 河东区| 铜山县| 茌平县| 南阳市| 永靖县| 朔州市| 阳新县| 建始县| 内黄县| 冷水江市| 剑川县| 玉门市| 凤冈县| 阳山县| 盐亭县|