RSpec - 测试强参数

时间:2013-05-15 20:36:43

标签: ruby-on-rails ruby-on-rails-3 rspec 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

我想测试user_params方法,以确保它正确地过滤掉恶意键/值对,但无法弄清楚如何执行此操作。还有其他人经历过这个吗?

3 个答案:

答案 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配置。