0

ページにユーザーを挿入しています (ページにはメンバーシップ テーブルを介して多くのユーザーがいます)。ロールが必要なため、失敗することが予想されます。メンバーシップのユーザー、ページ、およびロールに validate_presence_of があります(結合テーブル)。

私の問題は、例外がスローされるため、最後に到達する前にテストが中断することです。だから私はそれに「期待値上げ」を加えようと思った

it 'should not be valid without a role' do
  user = FactoryGirl.build(:user)
  expect { page.users << user }.to raise_error(ActiveRecord::RecordInvalid)
end

しかし、これはロールの欠如によってエラーが発生したことを実際にテストするものではありません (検証エラー: ロールが提供されていません)。これをテストするより良い方法はありますか?または、ユーザーを保存せずに page.users に設定し、ページが有効かどうかを確認する方法はありますか?

アップデート:

これも機能しません (例外は page.users << users、無効なアクティブ レコード、役割を提供する必要がある) でスローされます):

it 'should not be valid without a role' do
  user = FactoryGirl.build(:user)
  page.users << user
  page.should have(1).error_on :role
end

更新 2:

私は答えを持っていると思います、これは今のところうまくいきます

it 'should not be valid without a role' do
  user = FactoryGirl.build(:user)
  expect { page.users << user }.to raise_error(ActiveRecord::RecordInvalid, /Role must be provided/)
end    
4

1 に答える 1

1

Shoulda-matchers gemを確認してください。

次の構文を使用して試すこともできます。

it { should have(1).error_on :role }

基本的に、仕様からエラ​​ーにアクセスでき、必要なフィールドにエラーがあることを確認できます。

于 2013-07-09T07:38:56.667 に答える