我在控制器中使用strong_parameters
gem,但我很难理解如何测试它。
以下是我的设置示例
class UserController < ActionController::Base
include ActiveModel::ForbiddenAttributesProtection
def create
@user = User.new(user_params)
if @user.save
...
end
end
private
def user_params
params.require(:user).permit(:first_name, :last_name, :username, :email)
end
end
我想测试user_params
方法,以确保它正确地过滤掉恶意键/值对,但无法弄清楚如何执行此操作。还有其他人经历过这个吗?
答案 0 :(得分:15)
您可以将params哈希存根为
params = ActionController::Parameters.new(your_hash)
这是您的URL参数在控制器中转换为的类,它为您提供了require和permit方法。
我亲自将功能提取到一个新类来处理授权策略。
答案 1 :(得分:6)
根据您的需要进行修改
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
View lv = getView().findViewById(android.R.id.list);
if (lv != null) lv.setPadding(0, 0, 0, 0);
}
或该问题的其他替代解决方案是:
describe "create action" do
it 'creates a user' do
User.should_receive(:create).
with({name: 'Alan D'}.with_indifferent_access)
post :create, user:
{ first_name: 'Alan', last_name: 'Donald', username: 'alan77', email: 'mymail@yopmail.com' }
end
end
答案 2 :(得分:0)
我不确定我会测试strong_parameters
,我猜测你是通过the gem使用的。{/ p>
宝石有its own tests,所以我们可以假设它按预期工作。
这是“测试Rails”的一个例子,我认为这是不必要的。我不会测试attr_accessible
是否与广告(测试Rails)或attr_accessor
(测试Ruby)一样工作。
恕我直言,您的集成测试应涵盖所有需要的成功/失败实例,并隐式涵盖您的strong_parameter
配置。