User
私はRuby on Railsでこのクラスを持っています:
class User < ActiveRecord::Base
after_destroy :ensure_an_admin_remains
private
def ensure_an_admin_remains
if User.where("admin = ?", true).count.zero?
raise "Can't delete Admin."
end
end
end
これはうまく機能し、誰かが管理者ユーザーを誤って削除した場合、データベースのロールバックが発生します。
問題は、管理者以外のユーザー (Factory Girl によって生成された) でテストした場合でも、ユーザーの削除アクションが壊れているように見えることです。これは私のuser_controller_spec.rb
です:
describe 'DELETE #destroy' do
before :each do
@user = create(:non_admin_user)
sign_in(@user)
end
it "deletes the user" do
expect{
delete :destroy, id: @user
}.to change(User, :count).by(-1)
end
end
このテストを実行するたびに、次のエラーが発生します。
Failure/Error: expect{
count should have been changed by -1, but was changed by 0
@user
ただし、の admin 属性はデフォルトで false に設定されているため、エラーは発生しません。
誰か助けてくれませんか?
ありがとう...