Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何使用RSpec测试Rails 4中的质量分配_Ruby On Rails_Rspec_Rspec Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 如何使用RSpec测试Rails 4中的质量分配

Ruby on rails 如何使用RSpec测试Rails 4中的质量分配,ruby-on-rails,rspec,rspec-rails,ruby-on-rails-4,Ruby On Rails,Rspec,Rspec Rails,Ruby On Rails 4,给定一个简单的用户模型,在Rails4中,使用名称、电子邮件和管理布尔值,使用RSpec测试批量分配的最佳方法是什么 以下是UsersController: def create @user = User.new user_params ...snip end private def user_params params.require(:user).permit(:name, :email) end 在测试这一点时有两种不同的尝试: 在用户_spec.rb中 de

给定一个简单的用户模型,在Rails4中,使用名称、电子邮件和管理布尔值,使用RSpec测试批量分配的最佳方法是什么

以下是UsersController:

def create
  @user = User.new user_params
  ...snip
end

private

  def user_params
    params.require(:user).permit(:name, :email)
  end
在测试这一点时有两种不同的尝试:

在用户_spec.rb中

describe "accessible attributes" do
  describe "should not allow access to admin" do
    before do 
      @user.admin = "1"
      @user.save
    end
    it { should_not be_admin }
  end
end
it 'should only allow name and email to be set' do
  @controller.user_params.keys.should eq(['name', 'email')
end
或在用户\控制器\规范rb中

describe "accessible attributes" do
  describe "should not allow access to admin" do
    before do 
      @user.admin = "1"
      @user.save
    end
    it { should_not be_admin }
  end
end
it 'should only allow name and email to be set' do
  @controller.user_params.keys.should eq(['name', 'email')
end
这两项工作都没有——前者只是创建了一个admin设置为true(测试失败)的用户——这可能会绕过强_参数。后者可以工作,但只有在用户参数方法不是私有的情况下才能工作。(官方文件建议将其设置为private.Note-在用户规范中监视消息分配错误也不起作用(不会引发错误)

注意-实际上在视图中将用户设置为admin是正确的-admin属性被过滤掉了,所有人都很高兴,但是我真的希望看到它在测试中正常工作

另一种建议是与用户_spec.rb一起使用shoulda matchers gem:

describe User do
  ...
  it { should_not allow_mass_assignment_of(:admin) }
  ...
end
(这也不起作用),给出:

失败/错误:它{应该不允许分配(:admin)}
命名错误:
未定义的“活动授权人”方法#
(我假设这个错误是因为shoulda matchers还不兼容Rails 4)

提前谢谢

it "should not allow mass assignment" do
  raw_parameters = { :admin => 1 }
  parameters = ActionController::Parameters.new(raw_parameters)
  expect {@user.update_attributes(parameters)}.should raise_error
end
为了测试质量分配,您应该模拟控制器传递的参数


看一看,目前这似乎不起作用,获取:NoMethodError:undefined方法'active\u authorizer'(可能是因为Rails 4处于测试阶段)描述用户做它{不应该允许(:admin)的大量分配}结束------->在顶部使用它对错误没有影响-我将更新问题以供参考。这是我发布到类似问题的答案:仍然失败/错误:它{不应该是{u admin}预期管理员?返回false,得到True您的用户模型中是否有
attr\u accessible
attr\u protected
?这是Rails 4,attr\u accessible不再使用,因为它被强参数替换了?(因此,不,回答您的问题)很抱歉,这两种方法都不起作用-在控制器的.permit方法中不使用或使用:admin进行传递。奇怪的是,即使将:admin添加到许可列表中,控制台中的代码也会引发:ActiveModel::ForbiddenAttribute错误:ActiveModel::ForbiddenAttribute错误