在我看来,我有一个hidden_field_tag
,其值在控制器中设置为flash
。换句话说,流程如下:
控制器:
def home
flash[:id] = 123
end
查看:
<% form_tag(new_invitee_path) %>
<%= hidden_field_tag :referer, flash[:id] %>
<% end %>
提交给new_invitee_path的参数:
{ "referer" => "123" }
我可以确认在手动测试中这是正常的,但我无法弄清楚如何正确存根。
在我的测试中,我有:
before do
#set flash
visit '/home'
fill_in "rest_of_form"
click_button "submit_form
end
以下是我尝试为set flash
做的事情以及我收到的错误消息:
flash[:id] = 123
# OR
flash.now[:id] = 123
# both render error: undefined local variable or method `flash' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x007fc1040f7d60>
# Have also tried a tactic found online to set flash for response object like this:
visit '/home'
response.flash[:id] = 123
# OR
response.flash.now[:id] = 123
# both render error: undefined local variable or method `response' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0x007fe118a38490>
#Have read online that it's a problem with the flash being sweeped, so I tried to stub out the sweep, but am unclear how to set the anonymous controller or whatever correctly
controller.instance_eval{flash.stub!(:sweep)}
flash[:id] = 123
# OR
flash.now[:id] = 123
# renders error: undefined local variable or method `flash' for nil:NilClass
答案 0 :(得分:4)
您的规范是功能规范,因此规范环境无法访问Flash等内容。请勿尝试直接使用闪光灯。相反,理想情况下,测试用户的应用程序视图的外观和/或行为方式,如果按照应该的方式设置闪存值,应该采用的方式。我不会只是测试隐藏字段是否存在于表单中;我测试它在表单提交后应该具有的效果。这是什么功能规格的全部内容:从用户的角度测试应用程序的整体工作。
如果在UI中没有使用过闪存值,只是记录或存储在数据库中,则可以测试日志行或模型对象是否具有存储在数据库中的值。闪。 (此处的用户是管理员,他们会查看日志或稍后的内容。)但如果闪存确实影响了用户界面,那么测试更可取。
答案 1 :(得分:2)
这对我来说似乎很有效:
YourController.any_instance.stub(:flash) { {some: "thing" }}