2017-06-08 18 views
1

コントローラが完全に動作していても、私のテストに問題があります。パラメータを取得するMinitest

したがって、ユーザーのVIPステータスを変更するフォームがあります。

<%= form_tag("/activate/#{@user.id}", method: :get, class: "form-inline space-bottom") do |f| %> 
    <%= hidden_field_tag :vip, false %> 
    <%= check_box_tag :vip, type:"checkbox" %> 
    <%= date_field_tag(:vip_expiration_date, @user.vip_expiration_date) %> 
    <button type="submit"> 
     Change 
    </button> 

この形式は、このルートに送信します。

get '/activate/:id',   to: 'users#activate_vip' 

と、このコントローラのアクションに取得されます。また、

def activate_vip 
    @user = User.find(params[:id]) 
    if @user.update_attributes(activate_vip_params) 
    flash[:success] = "VIP status updated" 
    redirect_to @user 
    else 
    render show 
    end 
end 

def activate_vip_params 
    params.permit(:vip_expiration_date, :vip) 
end 

そして、このアクションは、正常に動作します、問題ないので、私はwanteそれはminitestを使用するためのテストを行うためにD:

test "Admin should be able to change vip status" do 
    log_in_as(@user) 
    get "/activate/#{@other_user.id}", params: {:vip => true} 
    assert @other_user.vip 
    end 

私は、このテストは単に合格だろうが、私はエラーになってると確信していた「truthyであることが予想される偽の。」

私の直感は、パラメータをどのように渡すかに関係すると言いました。そのため、いくつかのバリエーションをパラメータで試しましたが、すべて成功しませんでした。誰かが私にこのことを助けることができますか? '!= 5.10.2' 私は5

EDIT宝石 'minitest'、 '〜> 5.10'、およびレールを使用してい

コードを変更しましたので、私は "必要" ができ、ユーザ。

<%= form_for @user, url: "/activate/#{@user.id}", class: "form-inline" do |f| %> 
    <%= hidden_field_tag :vip, false %> 
    <%= f.check_box :vip, type:"checkbox" %> 
    <%= f.date_field :vip_expiration_date %> 
    <%= f.submit "Change" %> 
    <% end %> 

とコントローラ

def activate_vip_params 
    params.require(:user).permit(:vip_expiration_date, :vip) 
end 

とテスト:まだ

test "Admin should be able to change vip status" do 
    log_in_as(@user) 
    patch "/activate/#{@other_user.id}", user: { vip: true } 
    assert @other_user.vip 
end 

なし成功。コントローラは動作しますが、テストを行うことはできません。

------ ------ EDIT

ネヴァーマインド。それは愚かな間違いでした。

@other_userのフィクスチャで「vip:false」を追加するだけで、変数が初期化されました。

+0

回答の説明と回答を検討することを検討してください。 –

答えて

1

'params'を使用する必要はありません。許可されたパラメータ名を記述する必要があります。あなたのコントローラ内の元のために

def address_params 
    params.require(:address).permit(:street_address_1) 
end        

は、次にテストケースには、あなたはそれは単純なミスだった

test "Admin should be able to change vip status" do 
     log_in_as(@user) 
     get "/activate/#{@other_user.id}", address: { street_address_1: "1223 4th floor"} 
    assert @other_user.vip 
    end 
+0

私は "params.require(:address).permit(:street_address_1)"と書くことができるようにフォームを変更しましたが、成功しませんでした。 –

+0

get文の前にデバッガを追加し、ここで応答をコピーできますか? –

1

行うことができます。

実際にはすべて正常でしたが、@another_userのフィクスチャーにはvip: falseステータスが必要で、変数を初期化できました。

関連する問題