Почему мои исходящие URL-адреса в NUnit отличаются от тех, что в моем представлении? - PullRequest
1 голос
/ 03 февраля 2010

Я читаю книгу 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?

...