コントローラが完全に動作していても、私のテストに問題があります。パラメータを取得する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」を追加するだけで、変数が初期化されました。
回答の説明と回答を検討することを検討してください。 –