2017-05-31 51 views

回答

0

這應該工作:

test "should get index" do 
    session[:user_id] = @admin_user.id 
    get admin_product_url, params: {} 
    assert_response :success 
end 
+0

這是行不通的。它會導致NoMethodError:未定義的方法會話爲零:NilClass –

1

集成測試近似瀏覽會話,所以你讓只能用傳遞參數,頁眉等。從這個角度來看的要求,這是有道理的session訪問纔可以用,一旦你已經提出了一個初始請求,並且你不能像這樣傳遞一個哈希的會話變量。理想情況下,您應該測試更復雜的交互,而不僅僅是單個請求,並且您應該對控制器邏輯設置的會話值做出斷言。但你可以像這樣構造上面的測試:

test "should get index" do 
    get admin_product_url     # first request initializes session 
    session[:user_id] = @admin_user.id  # can now update session state 
    get admin_product_url     # subsequent request 
    assert_response :success    # assertions follow 
end 
+0

此解決方案對我無效。我沒有得到「Nil:NilClass」的「NoMethodError:未定義方法會話」錯誤,但會話信息被忽略 –

+0

是的,似乎@Зелёный有權利。暴露於集成測試的會話哈希看起來是不可變的。如果你想設置會話狀態,你需要在你的測試中編寫必要的初步請求。 –