У меня есть страница dashboard.html.erb
, которая может быть перенаправлена на несколько разных контроллеров/действий. Когда он получает перенаправление, он также получает несколько параметров URL.Rspec просмотр с параметрами url
код контроллера:
class PlansController
def some_action
redirect_to dashboard_path(show: "default", cool_array: ["test", "test"])
end
end
class StaticpagesController
def dashboard
end
end
Посмотреть код:
<% if cool_array %>
<% cool_array.each do |a| %>
<li><%= a %></li>
<% end %>
<% end %>
<script>
var show = getParamFromURL("show")
// some sort of function that returns the value of the show param, in this case, "default"
if (show == "default") {
$("#default").addClass("show");
} else {
$("#other").addClass("hidden");
}
</script>
Поскольку это переадресовывает, тестирование контроллера с render_views
не будет работать. Поэтому я подумал о том, чтобы построить мои тесты, чтобы контрольные спецификации проверяли, что передаются правильные параметры, а спецификация просмотра проверяет, что, если имеются определенные параметры, присутствуют правые классы css или что-то еще. Но, по моему мнению, у меня возникают проблемы с имитацией прохождения параметров.
Это, кажется, единственный другой вопрос на это, что я нашел: RSpec View testing: How to modify params?
Но ни одно из решений работали для меня; Я не уверен, что в этом случае мне нужен помощник ... который, кажется, немного надуманный ...
Я попытался (с привязанным SO вопроса выше):
before do
controller.request.path_parameters[:cool_array] = ["test","test"]
end
# => ActionView::Template::Error:
# undefined local variable or method `cool_array' for #<#<Class:0x007fe2d9815100>:0x007fe2d90a62e8>
# thrown by line in view file with <% if cool_array %>
before do
view.stub(:params).and_return({cool_array: ["test", "test"]})
end
# => ActionView::Template::Error:
# undefined local variable or method `cool_array' for #<#<Class:0x007fe2d9815100>:0x007fe2d90a62e8>
# thrown by line in view file with <% if cool_array %>
helper.params = {:cool_array => ["test", "test"]]}
# honestly not even sure this is right, because it can only go into a describe block (not a before, not an it) and then it throws:
# NoMethodError:
# undefined method `params=' for #<#<Class:0x007fd7cc8f4930>:0x007fd7cc8a5060>
И все они терпят неудачу с:
OMG я так глупо ... Может быть, я работал слишком много ... но я совершенно забыл о тестировании Staticpages контроллер! Я говорил, что «render_views» не работает, потому что в спецификации PlansController я не могу сказать «assert_redirected_to controller:« staticpages », action:« dashboard », cool_array: [" test "," test "]', а затем далее следуйте за тем, чтобы перенаправить тест на просмотр ... но, очевидно, я просто подобрал бы с помощью контроллера Staticpages ... gah теперь я чувствую себя очень глупо – james