Я пытаюсь протестировать наш проект Blazor с помощью bUnit, и у меня возникают проблемы с bUnit Assert
.
Это компонент, который я пытаюсь протестировать:
<div>
foreach(KeyValuePair<String, String> entry in Dictionary<String, String>)
{
<div class = "form-check">
<input class = "form-check-input" type = "radio" name = "[email protected]" id = "[email protected]@entry.Key" checked=@(firstOptionEnabled) @onclick = "() => doSomethingAwesome = entry.Key">
<label class = "form-check-label" for = "[email protected]@entry.Key"> @entry.Value </label>
</div>
firstOptionEnabled = false;
}
</div>
@code
{
[Parameter]
public Document ChosenDocument { get; set; }
}
Тест, который я написал, выглядит так:
[Fact]
public async void MyTest()
{
var cut = RenderComponent<MyComponent ChosenDocument = "documentToTest">();
IRefreshableElementCollection<IElement> allElements = cut.FindAll("div [class=\"form-check\"]");
// These are the <div class = "form-check"> elements
foreach(IElement element in allElements)
{
// These are the <input> elements
foreach(INode node in element.ChildNodes)
{
// Here, I want to assert on data within each of these `INode`
}
}
}
Моя проблема происходит с Assert
я хочу выступить.
Я хочу утвердить id
или name
каждого из элементов input
следующим образом:
Assert.Equal(("myAwesomeName-" + ChosenDocument.docId), <something here ...>);
Где <something here ...>
— это либо id
, либо name
элемента input
. Однако я не могу получить id
или name
от тестируемого компонента.
Когда я отлаживаю тест и смотрю в окно «Местные жители», я вижу это:
- node {AngleSharp.Html.Dom.HtmlInputElement} AngleSharp.Dom.INode {AngleSharp.Html.Dom.HtmlInputElement}
// ...
Id "myAwesomeName-1234567890-text" string
// ...
Name "myAwesomeName-1234567890" string
// ...
Итак, похоже, что эти две части информации должны быть доступны мне в моем Assert
, но это не так; ну по крайней мере мне не очевидно.
Как я могу получить доступ к этим двум частям данных, которые мне нужны для моего Assertion
?
Что-то вроде этого работает? Вы должны иметь возможность получить все элементы ввода напрямую:
var inputs = cut.FindAll(".form-check-input");
foreach (var input in inputs)
{
Assert.Equal($"myAwesomeName-{ChosenDocument.docId}", input.GetAttribute("name"));
}
или еще короче:
var inputs = cut.FindAll(".form-check-input");
Assert.All(inputs, i => Assert.Equal($"myAwesomeName-{ChosenDocument.docId}", i.GetAttribute("name")));