1

私の DB の最初のユーザーはスーパー管理者であり、そのアカウントに関連付けられた電子メール アドレスを誰も編集できないようにしたいので、次のモデル仕様を使用していますが、これは失敗しています。

# from my User model spec 
describe "super admin" do
 let(:super_admin){ FactoryGirl.create(:admin, email: "test@email.com") }
 it "can't be edited by anyone" do
    expect do
      super_admin.update_attributes(email: 'email@test.com')
    end.not_to change(super_admin, :email)
  end
end

私のコントローラーには、最初のデータベース エントリ (スーパー管理者) を編集しようとするユーザーをリダイレクトする前のフィルターがあります。

上記のテストが失敗しているのではないかと心配しています。この特定のユーザーの編集がコントローラーによってロックダウンされている場合、モデルでこれをテストするのは間違っていますか、それとも、リクエスト仕様またはモデル仕様に関係なく、合格することを期待する必要がありますか?

PS - ユーザー モデルには電子メール (文字列) と管理者 (ブール値) フィールドがあります。SuperAdmin は、たまたま管理者であるデータベースの最初のユーザーであり、特別なことは何もありません

4

1 に答える 1

1

「誰にも編集できない」動作が User モデルにmodels/user_spec.rb存在する場合は、テストを行うのに適した場所だと思いますが、ロジックが実際にモデルに存在しない場合、仕様がモデルに関係する必要があるのはなぜですか?

あなたはコントローラーにロジックを配置したので、私があなたなら、代わりにその動作の仕様をコントローラーの仕様に入れます。

実際にあなたの質問に答えるには: いいえ、モデル スペックはコントローラーの before_filters を実行しません。これは、コントローラーのコードに触れないためです。

于 2012-06-18T09:23:14.220 に答える