2015-08-30 36 views
0

我在測試中遇到錯誤ActionController::UrlGenerationError: No route matches {:action=>"show", :controller=>"profiles"} missing required keys: [:user_id]註冊。用戶在註冊後被重定向到用戶的個人資料,但我的測試失敗。下面是我的一些代碼行..ActionController :: UrlGenerationErr或:無路由匹配{:action =>「show」,:controller =>「profiles」}}缺少必需的鍵:[:user_id]

創建操作會話中控制器

def create 
    user = User.find_by(email: params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:password]) 
    log_in user 
    params[:session][:remember_me] == '1' ? remember(user) : forget(user) 
    redirect_back_or user_profile_path(user, @profile) 
    else 
    flash.now[:danger] = 'Invalid email/password combination' 
    render 'new' 
end 

創建操作用戶控制器

def create 
    @user = User.new(user_params) 
    if @user.save 
    log_in @user 
    flash[:success] = "Welcome to the Mini Olympics" 
    redirect_to user_profile_path(current_user, @profile) 
    else 
    render 'new' 
    end 
end 

在註冊TEST(用有效的信息)

test "valid signup information" do 
    get signup_path 
    assert_difference 'User.count', 1 do 
    post_via_redirect user_profile_path, user: { email: "[email protected]", 
        password: "password", 
        password_confirmation: "password", 
        profile_atrributes: {user_id: @user.id, name: "Example Test", street: "24 Fred Rd", city: "Cutlin", state: "SW", zipcode: "35478"}} 
    end 
    assert_template 'profiles/show' 
    assert is_logged_in? 
end 

測試在post_via_redirect行失敗,但實際的應用程序工作。

+0

@user是工廠嗎? – trh

+0

@trh,沒有它沒有。我也嘗試過'user.id'來達到同樣的效果。 –

回答

1

在測試中,user_profile_path缺少其參數。它應該是

post_via_redirect user_profile_path(user), user: { ... } 
+0

你是對的,但我注意到'POST'只適用於':create'動作,但是用我的代碼沒有創建配置文件。謝謝。 –

相關問題