【发布时间】:2011-06-09 03:51:22
【问题描述】:
在我的应用程序控制器中,我有几个方法定义如下:
def store_location
session[:return_to] = request.fullpath
end
def redirect_back_or_default(default)
# make sure this method doesn't redirect back to the current page
if session[:return_to] == request.fullpath
redirect_to default
else
redirect_to(session[:return_to] || default)
end
session[:return_to] = nil
end
为了测试这些方法,我需要想办法在 RSpec 中设置request.fullpath。有谁知道我如何做到这一点?
更新
在测试这些方法时,我使用的是共享示例组,如下所示:
shared_examples_for "redirect back or default" do
it "should redirect" do
request
response.should be_redirect
end
describe "when the user has a back page" do
it "should redirect to back"
end
describe "when the user does not have a back page" do
it "should redirect to default" do
request
response.should redirect_to(default_path)
end
end
end
当包含共享示例组时,我会执行以下操作:
before(:each) do
def request
post :create, :user => @attr
end
def default_path
:root
end
end
include_examples "redirect back or default"
因此,当一个方法使用redirect_back_or_default时,我只需将上面的代码添加到它的测试中就可以了。这样,我仍然可以具体测试redirect_back_or_default,而无需针对实现进行测试,这对我来说似乎是一种更好的 BDD 方式。
【问题讨论】:
标签: ruby-on-rails testing rspec