请参阅此简化的Blazor组件MyComponent:

<button id="enableButton" @onclick="Enable">Enable</button>
<button id="disableButton" @onclick="Disable">Disable</button>

<select disabled="@_disabled">
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="mercedes">Mercedes</option>
  <option value="audi">Audi</option>
</select>

@code {
    private bool _disabled;
    private void Enable() { _disabled = false; }
    private void Disable() { _disabled = true; }
}

下面是Blazor组件的两个简单的bUnit测试:

[Test]
public void Enable()
{
    using var testContext = new TestContext();
    var testee = testContext.RenderComponent<MyComponent>();

    testee.Find("[id^=\"enableButton\"]").Click();

    testee.Find("select").IsDisabled().Should().BeFalse();
}

[Test]
public void Disable()
{
    using var testContext = new TestContext();
    var testee = testContext.RenderComponent<MyComponent>();

    testee.Find("[id^=\"disableButton\"]").Click();

    testee.Find("select").IsDisabled().Should().BeTrue();
}

Disable测试失败,Expected testee.Find("select").IsDisabled() to be true, but found False.测试失败.但当在浏览器中渲染MyComponent时,一切都按预期进行.

我做错了什么?

推荐答案

Blazor渲染没有值的所有为真的布尔属性,而当布尔属性被指定为假时,它就不会被渲染.从HTML5规范的Angular 来看,这是完全合法的,但同样令人惊讶.

这意味着当_disabledfalse时,disabled属性不存在于呈现的标记中.要验证这一点,您可以执行以下操作:

testee.Find("select").HasAttribute("disabled").Should().BeFalse()

_disabledtrue时,您可以使用以下命令进行验证:

testee.Find("select").HasAttribute("disabled").Should().BeTrue();

Csharp相关问答推荐

错误401未授权ASP.NET Core.使用JWT创建身份验证/授权

在. net毛伊岛窗口的深度链接已经创建""

Entity Framework Core 8 dbcontext—无法以多对多关系添加某些行'

实体框架核心上是否支持使用NPGSQL的字符串聚合?

尽管保证密钥不同,但已添加相同密钥的项(&Q;)

调用Task.Run()与DoSomethingAsync()有什么不同?

当试图限制EF Select 的列时,如何避免重复代码?

为什么我可以用硬编码的集合而不是变量来设置没有setter的IList属性的值?

C#按名称从类获取属性值类型<;t>;,我需要反射吗?

如何返回具有泛型的类?

Content WithTargetPath实际上是有效的MSBuild项吗?

如何强制新设置在Unity中工作?

未显示详细信息的弹出对话框

正在try 将自定义字体添加到我的控制台应用程序

如何在.NET Core 8中自定义标识用户模型

try 访问字典中的模拟对象时引发KeyNotFoundException

将列表转换为带有逗号分隔字符串形式的值的字典

无法通过服务控制台启动.NET Core 6.0服务(错误1053)

XmlSerializer在遇到XML属性(命名空间)时崩溃

从列表中跳过和获取条目的优雅方式