1

私はユーザーモデルを持っています:

class User < ActiveRecord::Base
  attr_accessible :email, :name
  # admin only
  attr_accessible :email, :name, :admin, :as => :admin

そして、次のモデル仕様:

describe "accessible attributes" do

  let(:new_user){ FactoryGirl.create(:user) }
  @admin_attrs = { admin: true, name: "ben", email: "xyz@test.com"}

  it "can not be set on create" do

    # variant 1 - test fails, AM::MAS::Error NOT thrown
    expect do
      User.new(@admin_attrs)
    end.should raise_error(ActiveModel::MassAssignmentSecurity::Error)

    # variant 2 - test passes, AM::MAS::Error NOT thrown
    expect do
      User.new(admin: true, name: "ben", email: "xyz@test.com", password: "123xyz", password_confirmation: "123xyz")
    end.should raise_error(ActiveModel::MassAssignmentSecurity::Error)

  end

テストのバリアント 1 が失敗する理由がわかりませんが、バリアント 2 はパスします。私が得るエラーメッセージは次のとおりです。

1) User accessible attributes can not be set on create
     Failure/Error: expect do
       expected ActiveModel::MassAssignmentSecurity::Error but nothing was raised

それらは基本的に同じテストです。私は何を間違っていますか?実際、コンソールからテスト 1 を実行すると、予想どおり MAS::Error がスローされます。よくわかりません。

4

1 に答える 1

4

@admin_attrs は、最初のテキストの例に関する限り、おそらく nil です。これは、前フックで (または「let」を介して) 設定されていないためです。

于 2012-06-11T06:12:53.880 に答える