Bry*_*yce 13 rspec ruby-on-rails ruby-on-rails-3 strong-parameters
我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
Run Code Online (Sandbox Code Playgroud)
我想测试该user_params
方法,以确保它正确地过滤掉恶意键/值对,但无法弄清楚如何做到这一点.还有其他人经历过这个吗?
cpu*_*y83 15
您可以将params哈希存根为
params = ActionController::Parameters.new(your_hash)
Run Code Online (Sandbox Code Playgroud)
这是您的URL参数在控制器中转换为的类,它为您提供了require和permit方法.
我个人将功能提取到一个新类来处理授权策略.
根据您的需要进行修改,
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
Run Code Online (Sandbox Code Playgroud)
或该问题的其他替代解决方案是:
describe UsersController::UserParams do
it 'cleans the params' do
params = ActionController::Parameters.new(user: {foo: 'bar', name: 'baz'})
user_params = UsersController::UserParams.build(params)
expect(user_params).to eq({name: 'baz'}.with_indifferent_access)
end
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5913 次 |
最近记录: |