簡體   English   中英

Rails 和 Rspec - 無法批量分配受保護的屬性

[英]Rails and Rspec - can't mass-assign protected attributes

我正在使用 rspec 創建一個帶有 TDD 的 Rails 應用程序。我收到一個無法刪除的錯誤:

Failure/Error: invalid_user = User.new(@attr.merge("provider" => ""))
 ActiveModel::MassAssignmentSecurity::Error:
   Can't mass-assign protected attributes: uid, info

這是我的用戶規范:

user_spec.rb

require 'spec_helper'

describe User do
  before(:each) do
  @attr = {"provider" => "providerexample", "uid" => "uidexample", "info" => {"name" =>     "Example"}}
 end

it "should create a new instance given valid attributes" do
  user = User.create_with_omniauth(@attr)
end

it "should require a provider" do
  invalid_user = User.new(@attr.merge("provider" => ""))
  invalid_user.should_not be_valid
end 

it "should require a uid" do
  invalid_user = User.new(@attr.merge("uid" => ""))
  invalid_user.should_not be_valid
end
end

還有我的user.rb

class User < ActiveRecord::Base
  attr_accessible :name, :credits, :email, :provider

  validates :name, :provider, :uid, :presence => true

  def self.create_with_omniauth(auth)
    create! do |user|
    user.provider = auth["provider"]
    user.uid      = auth["uid"]
    user.name     = auth["info"]["name"]
  end
 end

結尾

如果我通過將uidinfo添加到attr_accessible來調試mass-assign錯誤,我仍然會收到以下錯誤unknown attribute: info

如果您將作為@attr 的內容與信息合並,那么它將存在於 create_with_omniauth 調用中,但不存在於常規創建方法中。

describe User do
  let(:user_attributes) { {"provider" => "providerexample", "uid" => "uidexample"} }

  it "should create a new instance given valid attributes" do
    expect {
      User.create_with_omniauth(user_attributes.merge({"info" => {"name" => "example"}))
    }.to not_raise_error
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM