在 bUnit 测试时,如何从 AngleSharp.Dom.INode 访问输入元素 ID 或名称?
How can I access an input elements id or name from an AngleSharp.Dom.INode while bUnit testing?
我正在尝试使用 bUnit 测试我们的 Blazor 项目,但遇到了 bUnit 问题 Assert
。
这是我要测试的组件:
<div>
foreach(KeyValuePair<String, String> entry in Dictionary<String, String>)
{
<div class="form-check">
<input class="form-check-input" type="radio" name="myAwesomeName-@ChosenDocument.docId" id="myAwesomeName@ChosenDocument.docId-@entry.Key" checked=@(firstOptionEnabled) @onclick="() => doSomethingAwesome = entry.Key">
<label class="form-check-label" for="myAwesomeName-@ChosenDocument.docId-@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
出现了问题。
我想声明每个 input
元素的 id
或 name
,如下所示:
Assert.Equal(("myAwesomeName-" + ChosenDocument.docId), <something here ...>);
其中 <something here ...>
是 input
元素的 id
或 name
。但是,我似乎无法从被测组件中获取 id
或 name
。
当我调试测试并查看“本地”window 时,我可以看到:
- 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")));
我正在尝试使用 bUnit 测试我们的 Blazor 项目,但遇到了 bUnit 问题 Assert
。
这是我要测试的组件:
<div>
foreach(KeyValuePair<String, String> entry in Dictionary<String, String>)
{
<div class="form-check">
<input class="form-check-input" type="radio" name="myAwesomeName-@ChosenDocument.docId" id="myAwesomeName@ChosenDocument.docId-@entry.Key" checked=@(firstOptionEnabled) @onclick="() => doSomethingAwesome = entry.Key">
<label class="form-check-label" for="myAwesomeName-@ChosenDocument.docId-@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
出现了问题。
我想声明每个 input
元素的 id
或 name
,如下所示:
Assert.Equal(("myAwesomeName-" + ChosenDocument.docId), <something here ...>);
其中 <something here ...>
是 input
元素的 id
或 name
。但是,我似乎无法从被测组件中获取 id
或 name
。
当我调试测试并查看“本地”window 时,我可以看到:
- 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")));