Я читаю книгу Pro ASP.NET MVC Framework. В примере на 106 - 111 автор проходит через создание теста NUnit для класса HTMLHelper.
Я заметил, что когда я запускал свой код HTMLHelper в NUnit, ссылки выглядели так:
<a href="Page1">1</a>
<a class="selected" href="Page2">2</a>
<a href="Page3">3</a>
Но когда я вижу их в виде, они выглядят так:
<a href="/">1</a>
<a class="selected" href="/Page2">2</a>
<a href="/Page3">3</a>
Вот мой код маршрута:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
null,
"",
new { controller = "Products", action = "List", page = 1 }
);
routes.MapRoute(
null,
"Page{page}",
new {controller = "Products",action="List"},
new {page=@"\d+" }
);
Код помощника
public static string PageLinks(this HtmlHelper html, int currentPage,
int totalPages, Func<int, string> pageUrl)
{
StringBuilder result = new StringBuilder();
for (int i = 1; i <= totalPages; i++)
{
TagBuilder tag = new TagBuilder("a");
tag.MergeAttribute("href", pageUrl(i));
tag.InnerHtml = i.ToString();
if (i == currentPage)
tag.AddCssClass("selected");
result.AppendLine(tag.ToString());
}
return result.ToString();
}
Просмотр кода
<%= Html.PageLinks(2,3,i=>Url.Action("List",new {page=i})) %>
код теста
string links = ((HtmlHelper)null).PageLinks(2, 3, i => "Page" + i);
Assert.AreEqual(@"<a href=""Page1"">1</a>
<a class=""selected"" href=""Page2"">2</a>
<a href=""Page3"">3</a>
", links);
Я понимаю, что URL создаются на основе информации в моей таблице маршрутизации, поэтому я не уверен, почему ссылки будут другими. Разве NUnit не имеет ту же перспективу, что и представление, и, следовательно, создает разные ссылки? Как я могу заставить NUnit генерировать те же самые точные ссылки, что и мой View?