Я полагаю, что вы можете использовать тест контроллера типов вместо создания экземпляра вашего контроллера, а затем использовать метод RSpec assigns
( docs ) для проверки переменных вашего экземпляра, что-то вроде этого: [117 ]
RSpec.describe DashboardsController, :type => :controller do
context "with session" do
# ...
it "executes other functions" do
expect(assigns(:org_data)).not_to be_nil
end
end
end
https://relishapp.com/rspec/rspec-rails/docs/controller-specs
Также, если вы хотите проверить поток и выполнить отладку ваш код, вы можете использовать драгоценные камни pry
, pry-rails
и pry-nav
как указано @Marek Lipka.
Можно хотеть считать эту ПОДСКАЗКУ.
В этой подсказке Stephen Walter демонстрирует три метода создания каскадных выпадающих списков. Во-первых, он показывает Вам, как изменить список опций, отображенных одним выпадающим списком, когда опция в другом выпадающем списке изменяется. Во-вторых, он показывает Вам, как выставить данные для выпадающих списков посредством действия контроллера. Затем, он показывает Вам, как захватить данные для выпадающих списков от веб-сервисов.
Используемый вами совет: Совет № 41 для ASP.NET MVC - создание каскадных выпадающих списков с помощью Ajax от Стивена Уолтера было не сделано с MVC Realease 1.0
. Как таковой, он отлично работает с загруженным проектом (после исправления некоторых небольших проблем), но когда вы пытаетесь включить его в MVC Release 1.0, вещи ломаются.
Например: в загруженном проекте сценарии находятся в папке содержимого, в версии 1.0 сценарии находятся в папке сценариев.
Также некоторые (если не все) файлы * .js в выпуске изменилось от ставок и ОСАГО. Это тоже может быть проблемой.
Я скачал его проект (исправил несколько мелких проблем), и он хорошо работал в этом проекте (файлы * .js).
Например,
Я исправил следующее как:
ИЗМЕНЕНИЕ : \ Views \ Home \ index.aspx
<label for="Makes">Car Make:</label>
<%= Html.DropDownList("--Select Make--", "Makes") %>
TO:
<label for="Makes">Car Make:</label>
<%= Html.DropDownList("Makes", (SelectList)ViewData["Makes"], "--Select Make--")%>
Итак, как вы видите, есть некоторые проблемы.
Эти типовые проблемы с учебниками и блогами многочисленны; все хотят, чтобы их считали «экспертами» по выпускаемым новым технологиям, поэтому они пишут учебные пособия по бета-версиям и ОСАГО. В результате у «Эксперта» будет материал, который не работает с финальной версией.
Вам нужно найти профессионала, который разместил учебные пособия. Профессионал гарантирует, что их учебники работают. Под профессионалом я подразумеваю профессионального тренера в этой области.
У Стивена Вальтера есть один из лучших блогов и много хороших вещей, но помните, что он является евангелистом Microsoift. Он пишет книги по технологиям MS, поэтому ему нужно быть активным в мире блогов, чтобы рассказать о передовых технологиях. Это делает его экспертом, поэтому его книги можно продавать.
Возможно, вы захотите взглянуть на сообщение , которое я сделал пару недель назад именно по этому
. Сначала нам нужно настроить действие контроллера JsonResult.
/// <summary></summary>
/// Get Models
/// <param name="makeID" />
/// <returns></returns>
public JsonResult GetModels(string id)
{
JsonResult result = new JsonResult();
var filteredModels = from model in homeViewModel.Models
where model.MakeID.ToString() == id
select model; result.Data = filteredModels.ToList();
result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return result;
}
Этот метод теперь дает нам возможность использовать изящный
$. GetJSON
jquery. вызов. Подпись для вызова следующая
jQuery.getJSON( url, [ data ], [ callback(data, textStatus) ] )
Учитывая, что у нас есть 2 раскрывающихся списка, один для Makes и другой для моделей, вот так.
Html.DropDownListFor((model) => model.MakeID, new SelectList(Model.Makes, "ID", "Description"))
Html.DropDownListFor((model) => model.ModelID, new SelectList(Model.Models, "ID", "Description"))
мы можем включить следующий фрагмент jquery
//Hook onto the MakeID list's onchange event
$("#MakeID").change(function() {
//build the request url
var url = '<!--Url.Content("~/")-->' + 'Home/GetModels';
//fire off the request, passing it the id which is the MakeID's selected item value
$.getJSON(url, { id: $("#MakeID").val() }, function(data) {
//Clear the Model list
$("#ModelID").empty();
//Foreach Model in the list, add a model option from the data returned
$.each(data, function(index, optionData) {
$("ModelID").append("<option value=" + optionData.ID +">"+ optionData.Description +"</option>" );
});
});
}).change();
Извините за бессовестный плагин: (
Я создал для этого плагин jQuery.
http://weblogs.asp.net/rajbk/archive/2010/05/20/cascadingdropdown-jquery-plugin-for-asp-net-mvc.aspx