模型规格是否执行控制器before_filters?

时间:2012-06-18 09:14:39

标签: ruby-on-rails rspec

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

# 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只是数据库中的第一个用户,恰好是管理员,没有什么花哨的

1 个答案:

答案 0 :(得分:1)

如果“无法被任何人编辑”行为存在于用户模型中,那么我认为models/user_spec.rb是放置测试的好地方,但如果逻辑实际上不在模型中,为什么这个规格应该关注模型吗?

你把逻辑放在控制器中,所以如果我是你,我会把这种行为的规格放在控制器规范中。

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