我正在测试一个需要在闪存中存储值的动作。
def my_action
if flash[:something].nil?
redirect_to root_path if flash[:something]
return
end
# Do some other stuff
end
在我的测试中,我做了如下操作:
before(:each) do
flash[:something] = "bob"
end
it "should do whatever I had commented out above" do
get :my_action
# Assert something
end
我遇到的问题是flash在my_action中没有值,我猜这是因为实际上没有请求发生。
有没有办法为这样的测试设置闪光灯?
3条答案
按热度按时间xxls0lw81#
我不得不解决类似的问题;我有一个控制器操作,它在完成时根据哈希条目的值重定向到两个路径中的一个。对于上面的示例,我发现规范测试是有效的:
@current_session是具有会话特定填充的散列;我用的是authlogic,我发现在[A Guide to Testing Rails Applications[1]中使用get的第四个参数,我发现同样的方法也适用于delete;我想其他人也一样。
yi0zb3m42#
以下内容适用于RoR 4.1:
kxeu7u2r3#
问题是你使用flash散列的方式意味着它只对下一个请求可用。为了给你的测试设置一个flash散列值,你可以写这样的代码:
这确保了你可以检查你的动作的逻辑,因为它现在可以正确地设置flash散列,输入你的my_action并检查flash散列。