0

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

終わり

にとをmass-assign追加してエラーをデバッグしても、次のエラーが表示されます。uidinfoattr_accessibleunknown attribute: info

4

1 に答える 1

1

@attr として持っていたものを info とマージすると、 create_with_omniauth 呼び出しには存在しますが、通常の create メソッドには存在しません。

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
于 2012-04-09T02:04:28.193 に答える