gpt4 book ai didi

ruby-on-rails - 如何测试 Controller 规范中的 strong_parameters?

转载 作者:太空宇宙 更新时间:2023-11-03 18:22:42 26 4
gpt4 key购买 nike

我想在添加 strong_parameters gem 后测试我的 Controller ,该怎么做?我试过:

Controller

class EventsController < ApplicationController
def update
@event = Event.find(params[:id])
respond_to do |format|
if @event.update_attributes(event_params)
format.html { redirect_to(@event, :notice => 'Saved!') }
else
format.html { render :action => "new" }
end
end
end

private
def event_params
params.require(:event).permit!
end
end

规范

describe EventsController do
describe "PUT update" do
describe "with forbidden params" do
let(:event) { Event.create! title: "old_title", location: "old_location", starts_at: Date.today }

it "does not update the forbidden params" do
put :update,
id: event.to_param,
event: { 'title' => 'new_title', 'location' => 'NY' }

assigns(:event).title.should eq('new_title') # explicitly permitted
assigns(:event).location.should eq("old_location") # implicitly forbidden

response.should redirect_to event
end
end
end
end

错误

1) EventsController PUT update with forbidden params does not update the forbidden params
Failure/Error: assigns(:event).title.should eq('new_title') # explicitly permitted
NoMethodError:
undefined method `title' for nil:NilClass
# ./spec/controllers/events_controller_spec.rb:13:in

最佳答案

我看到这里发生了一些事情。

第 13 行显示 undefined method 是因为 @event 变量没有被赋值,所以 assigns(:event) 返回 nil。您应该检查为什么会这样,也许您有一些身份验证阻止您更新记录?也许您可以查看测试日志以了解实际情况。
这可能是因为您正在使用 let() ,它是惰性的,并且当您尝试搜索它时记录实际上还不可用,但我不完全确定。您可以尝试使用 let!() 看看是否有帮助。

关于强参数的实际使用,如果你只想让title可赋值,你需要做类似下面的事情:

params.require(:event).permit(:title)

如果您使用permit!,事件参数哈希和每个子哈希都被列入白名单。

关于ruby-on-rails - 如何测试 Controller 规范中的 strong_parameters?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15520928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com