1

私はそのようなプロファイルモデルを持っています。

class Profile < ActiveRecord::Base
  attr_accessible :first_name, :last_name
  belongs_to :user
  validates :user, presence: true
  validates :first_name, presence: true, on: :update
  validates :last_name, presence: true, on: :update
end

profile.should_not be_validfirst_nameとlast_nameの検証をテストするためにいくつかのrspecテストを作成したいのですが、モデルテストで更新時にのみ実行する方法がわかりません。何かのようなもの;

it "should be invalid without a first name on update" do
  profile = FactoryGirl.build :profile
  profile.first_name = nil
  profile_should_not be_valid
end

更新アクションと作成アクションを区別せず、これに関するrspecドキュメントに何も表示されません。確かに、テストするのはかなり一般的なことです。

4

1 に答える 1

3

be_validrspecvalid?では、モデルを呼び出すだけです。

profile = FactoryGirl.build :profile

これにより、 の新しいモデル インスタンスが作成Profileされますが、データベースにはコミットされません。これprofileを作成テストに使用します。:first_nameshouldへの設定nilと呼び出しprofile.should be_validはパスする必要があります。

profile = FactoryGirl.create :profile

これにより、モデル インスタンスが構築され、データベースに挿入Profileされます。これprofileを更新テストに使用します。:first_nameshouldへの設定nilと呼び出しprofile.should be_valid失敗するはずです。

于 2012-07-08T23:50:30.617 に答える