【发布时间】:2011-08-18 09:30:49
【问题描述】:
我的 ApplicationController 中有一个 check_user_access_control before_filter,它在允许登录用户通过之前检查登录用户的角色和权限。我正在尝试对其进行一些测试,但我找不到这样做的好方法。
对于简单的索引操作,我只是这样做:
it "allows access to mod" do
login_as(Factory(:mod)) # this is a spec helper
get :index
response.code.should == "200"
end
它工作得很好。对于需要一些参数的编辑/显示/创建和其他操作、与数据库的交互以及运行后可能的重定向,它需要存根太多其他东西。
有没有办法测试是否在 before_filters 之后调用了特定操作?我正在寻找类似 @987654323@ 的东西(不起作用)来替换 response.code.should == "200" 行与。
版本:rails 3.0.4 和 rspec 2.5
我尝试了另一种方法。我们在 ApplicationController 中有一个名为 redirect_to_login 的方法,我现在正在使用 controller.should_receive(:redirect_to_login) 检查它并且可以正常工作。
虽然它正确检测用户是否被允许,但它会存根方法,这意味着无论用户是否被允许,控制器操作都会运行。此外,该操作取决于参数和数据库,我们不希望这样。
如果现在我使用controller.stub!(:action_name) 存根操作方法,则操作不会运行,但 RSpec 仍在寻找模板。好吧,有些动作没有模板,它们只是以 redirect_to :action => :somewhere_else 或 render :text => "foobar" 结尾,此时我们并不关心。
总的来说,我现在需要的是找到一种方法让 RSpec 不担心模板的存在。
【问题讨论】:
标签: ruby-on-rails rspec