Kos*_*tas 13 rspec ruby-on-rails
check_user_access_control
我的ApplicationController中有一个before_filter,它在记录用户的角色和权限允许之前检查它.我正在尝试对它进行一些测试,但我找不到一个很好的方法.
对于简单的索引操作,我只需:
it "allows access to mod" do
login_as(Factory(:mod)) # this is a spec helper
get :index
response.code.should == "200"
end
Run Code Online (Sandbox Code Playgroud)
它工作得很好.对于需要一些参数的编辑/显示/创建和其他操作,与数据库的交互以及运行后可能的重定向,它需要太多其他东西才能被存根.
有没有办法测试在before_filters之后是否调用了特定的动作?我正在寻找类似controller.should_receive(:action_name)
(不起作用)的东西来替换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的不担心模板的存在.
当存根时,你仍然可以给出一个虚拟实现.在该实现中,您可以引发错误,确保所有执行都停止,或者您仍然执行重定向.
例如
controller.should_receive(:redirect_to_log) { redirect_to login_url }
Run Code Online (Sandbox Code Playgroud)
要么
controller.should_receive(:redirect_to_log) { raise StandardError.new('login error') }
expect { get :index }.to raise_error
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查看令人敬畏的rspec文档.
希望能帮助到你.
归档时间: |
|
查看次数: |
17688 次 |
最近记录: |