對測驗非常陌生
我有一個無模型的rails應用程式,有一個名為 "PokerController "的控制器在poker_controller.rb中,我有一個私有方法,看起來像這樣: private
def test(x)
1 x
end
然后我在test/controllers里有一個叫'poker_controller_test.rb'的檔案
。我想做的事情是:
require 'test_helper'
class PokerControllerTest < ActionController::TestCase
test "check if test == 2" do
test = test(1)
斷言test == 2
結束。
結束。
正如你所看到的,我正試圖將函式'test'的呼叫結果保存到一個名為'test'的變數中,然后我將檢查該變數是否==2。
基本上,我試圖向測驗方法傳遞一個數字(本例中為'1'),我想讓測驗將1加到1,并期望得到2。
我相信我只是沒有正確地設定測驗,但是我如何呼叫這樣的自定義方法,然后評估回傳的內容?
這是我在測驗中出錯的結果:
Error:
PokerControllerTest#test_check_if_test_==_2:/span>
ArgumentError:未知命令"x01"。
test/controllers/poker_controller_test.rb:6:in `test'
test/controllers/poker_controller_test.rb:6:in `block in <class:PokerControllerTest> '
uj5u.com熱心網友回復:
你不知道。
。一般來說,測驗私有方法是不受歡迎的*。
在Rails中,你主要通過集成測驗來測驗控制器。這些測驗會向你的應用程式發送真實的 HTTP 請求,然后你寫下關于回應或發送請求的副作用的斷言。
"[......]你可以測驗哪些cookie被設定,哪些HTTP代碼被回傳,視圖看起來如何,或者資料庫發生了哪些變化,但是測驗控制器的內部并不是一個好主意。 - David Heinemeier Hansson
集成測驗的一個例子是:
require "test_helper"/span>
class PokerControllerTest < ActionDispatch::IntegrationTest
測驗 "能看到歡迎頁面" do
獲取"/path/to/somewhere"。
assert_select "h1", "歡迎來到我超棒的撲克應用"。
結束。
end end
如果你有一個你想單獨測驗的方法,它首先不屬于你的控制器,可以說它也不應該是一個私有方法。
你應該測驗你的物件的公共API。控制器的公共API是通過路由器回應HTTP請求的方法。
使用ActionController::TestCase是不鼓勵在傳統應用程式之外使用。
新的 Rails 應用程式不再生成功能風格的控制器 測驗,它們應該只用于向后兼容。 集成風格的控制器測驗執行實際請求,而 功能風格的控制器測驗只是模擬請求。此外。 集成測驗和功能測驗一樣快,并且提供了大量的 助手,例如,決議的身體,以有效地測驗控制器的動作,甚至包括API端點。 甚至包括API端點。
除此之外,你的測驗的問題是,你在ActionController::TestCase的實體上呼叫test方法,而不是你的控制器。然后你通過定義一個同名的實體變數來影射這個方法,這很少是一件好事。
即使你在控制器上呼叫了這個方法,Ruby仍然會引發錯誤,因為你在物件外部呼叫了一個私有方法--這就是私有方法的全部意義所在。
雖然你可以通過呼叫@controller.send(:test)來違反封裝,但這在很多方面都是一個壞主意。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/332299.html
標籤:
