1

我的数据库中的第一个用户是超级管理员,我不希望任何人能够编辑与该帐户关联的电子邮件地址,所以我有以下模型规范,但它失败了。

# 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

我的控制器有一个 before 过滤器,它重定向任何尝试编辑第一个数据库条目的用户(超级管理员)。

我担心上面的测试失败了。当编辑这个特定用户被控制器锁定时,我在模型中测试它是错误的,还是我仍然希望它通过,无论它是在请求规范还是模型规范中?

PS - 用户模型具有电子邮件(字符串)和管理员(布尔)字段。SuperAdmin 只是数据库中的第一个用户,恰好是管理员,没什么花哨的

4

1 回答 1

1

如果“任何人都无法编辑”行为存在于 User 模型中,那么我认为models/user_spec.rb这是一个进行测试的好地方,但如果逻辑实际上并不存在于模型中,那么规范为什么要完全关注模型?

您将逻辑放在控制器中,所以如果我是您,我会将针对该行为的规范放在控制器规范中。

并实际回答您的问题:不,模型规范不会执行控制器 before_filters,因为它们不会触及任何控制器代码。

于 2012-06-18T09:23:14.220 回答