ASP.NET MVC - модульное тестирование HTML, сгенерированного TagBuilders
У меня есть код, который генерирует HTML через TagBuilders. Как я могу проверить, генерируется ли правильный HTML? Мой TagBuilder не так прост, как один тег, он также содержит другие теги. Итак, у меня есть функция, которая возвращает объект TagBuilder со следующим HTML
<div>
<input type="checkbox" name=".." /> <label for=".." />
<input type="checkbox" name=".." /> <label for=".." />
<input type="checkbox" name=".." /> <label for=".." />
<div/>
Итак, чтобы проверить, есть ли у нас первый флажок, мы делаем:
Assert.True(MyTag.InnerHtml.Contains("<input type="checkbox" name=".." />");
Это кажется неправильным. Есть ли другой способ сделать это?
1 ответ
Что вы можете сделать, это использовать HtmlAgilityPack для создания HtmlDocument
вашего тега, затем выполните запросы, чтобы получить количество элементов и т. д.
HtmlDocument document = new HtmlDocument();
document.LoadHtml(MyTag.ToString());
var checkBoxCount = document.DocumentNode.DescendantNodes()
.Where(item => item.Name == "input" && item.GetAttributeValue("name", string.Empty) == "..")
.Count();
Assert.True(checkBoxCount == 3);
Вы можете очистить вызовы, имея метод, который принимает документ и функцию предиката и возвращает количество элементов.
При таком подходе вы должны быть осторожны, чтобы вывод Html ваших методов был действительным, иначе HtmlAgilityPack попытается исправить это для вас, что приведет к странным проблемам с тестированием.