【发布时间】:2018-06-28 02:29:48
【问题描述】:
我正在使用一个旧版 Rails 应用程序,该应用程序已使用 Rails 的每个主要版本进行了认真升级,我们目前使用的是 rails 5.1,如果验证失败,我无法获得 before_destroy 以防止删除
我一直在读到 return false 已被弃用,我们都应该使用 throw :abort 但两者都不起作用。我没有收到任何错误,尽管throw
user.rb:
class User < ApplicationRecord
has_many :permission_users
has_many :permissions, through: :permission_users, dependent: :destroy
end
加入模型permission_user.rb:
class PermissionUser < ApplicationRecord
belongs_to :user
belongs_to :permission
before_destroy :check_before_removing!
private
def check_before_removing!
if not_valid? # condition isn't important
errors.add :base, exception.message
throw(:abort)
end
end
end
我的规格:
specify "cannot have their admin permissions revoked" do
expect {
admin.permissions.delete admin_permission
}.to change { admin.permissions.count }.by(0)
end
# => expected `admin.permissions.count` to have changed by 0, but was changed by -1
【问题讨论】:
-
有点跑题了,但是:
expect{}.to change{}.by(0)->expect{}.not_to change{} -
我实际上精简了规范以专注于问题。我实际上正在测试 2 个不同的值不会改变,显然 rspec 不喜欢
.to_not change { ... }.and change { ... }但谢谢
标签: rspec callback ruby-on-rails-5 has-and-belongs-to-many