Как выполнить модульное тестирование Tag Helper с помощью IHtmlGenerator - PullRequest
1 голос
/ 21 марта 2019

Я создал несколько помощников тегов в AspNetCore, которые принимают генератор IHtmlGenerator в качестве конструктора.Я хочу создать модульные тесты для них, но я не знаю, что передать конструкторам.Я вижу, что реализация получает DefaultHtmlGenerator в конструкторе, но это, в свою очередь, также принимает многочисленные элементы в конструкторе, поэтому я немного растерялся, как это сделать.

public class FormLabelTagHelper : TagHelper
{
    public FormLabelTagHelper(IHtmlGenerator generator)
    {
        this.Generator = generator;
    }

    [HtmlAttributeName("asp-for")]
    public ModelExpression For { get; set; }

    public IHtmlGenerator Generator { get; }

    [ViewContext]
    [HtmlAttributeNotBound]
    public ViewContext ViewContext { get; set; }

    public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
    {
        TagHelperOutput labelElement = await this.CreateLabelElement(context);
        labelElement.AddClass("control-label", HtmlEncoder.Default);

        output.TagName = null;
        output.Content.AppendHtml(labelElement);
        output.TagMode = TagMode.StartTagAndEndTag;
    }

    protected async Task<TagHelperOutput> CreateLabelElement(TagHelperContext context)
    {
        LabelTagHelper labelTagHelper = new LabelTagHelper(this.Generator)
        {
            For = this.For,
            ViewContext = this.ViewContext
        };

        TagHelperOutput labelOutput = this.CreateTagHelperOutput("label");
        await labelTagHelper.ProcessAsync(context, labelOutput);
        return labelOutput;
    }

    protected TagHelperOutput CreateTagHelperOutput(string tagName)
    {
        return new TagHelperOutput(
            tagName: tagName,
            attributes: new TagHelperAttributeList(),
            getChildContentAsync: (s, t) =>
            {
                return Task.Factory.StartNew<TagHelperContent>(() => new DefaultTagHelperContent());
            });
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...