Тестирование пользовательских Razor Helpers в MVC3 - PullRequest
1 голос
/ 22 ноября 2011

Я создал пользовательский помощник в соответствии с инструкциями здесь и здесь . Вот фрагмент того, на что это похоже (ThemeHelper.cs):

@inherits Helpers.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html
@...

@helper PathTo(string fileName) {
    @Url.Content("~/Content/Themes/" + Theme.CurrentTheme.FolderName + "/" + fileName);
}

Я поместил это в App_Code, как указано. Я могу использовать этих помощников в своих взглядах, чего я и хочу.

Теперь мой вопрос: как мне проверить это? Например, я не могу рефлексивно получить экземпляр класса ThemeHelper ни в текущей сборке, ни путем рефлексивного доступа к сборкам App_Code или __Code (ни одна из которых фактически не возвращается).

В идеале я хотел бы как-нибудь вызвать эти функции и проверить результаты / HTML. У меня есть инфраструктура (C # версия HtmlUnit 2.7), которая позволяет мне запрашивать URL-адреса и проверять HTML.

Есть ли способ проверить мой пользовательский помощник? Я хотел бы написать что-то вроде:

ThemeHelper h = new ThemeHelper(); // or: Assembly.CreateInstance(...) or something
string html = h.PathTo("Site.css");
Assert.IsTrue(html.contains("Themes");

1 Ответ

0 голосов
/ 22 ноября 2011

Теперь мой вопрос: как мне проверить это?

Нелегко будет тестировать помощников Razor Page изолированно.

Чтобы иметь возможность проверять юниты и просматривать вспомогательные помощники (не зависящие от используемого вами движка представления), вы должны использовать стандартные помощники HTML, которые входят в качестве метода расширения для классов HtmlHelper или UrlHelper. Пример:

public static class UrlExtensions
{
    public static string ThemeHelper(this UrlHelper urlHelper, string fileName)
    {
        return urlHelper.Content("~/Content/Themes/" + Theme.CurrentTheme.FolderName + "/" + fileName);
    }
}
...