我的数据库中的第一个用户是超级管理员,我不希望任何人能够编辑与该帐户关联的电子邮件地址,因此我有以下型号规格,即失败。
# 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只是数据库中的第一个用户,恰好是管理员,没有什么花哨的
答案 0 :(得分:1)
如果“无法被任何人编辑”行为存在于用户模型中,那么我认为models/user_spec.rb
是放置测试的好地方,但如果逻辑实际上不在模型中,为什么这个规格应该关注模型吗?
你把逻辑放在控制器中,所以如果我是你,我会把这种行为的规格放在控制器规范中。
实际上回答你的问题:不,模型规范不会执行控制器before_filters,因为它们不会触及任何控制器代码。