You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

bUnit测试Blazor组件时绑定属性MyValue不更新的问题求助

解决bUnit模拟按键时Blazor输入框绑定属性不更新的问题

核心原因

bUnit的KeyUp方法仅触发键盘事件不会自动更新输入框的value属性,而你的Blazor组件使用@bind-value:event="onchange"绑定MyValue——这种绑定仅在输入框触发change事件(如失去焦点、按下回车)时,才会将输入框的实际值同步到绑定属性中。

模拟单个字符的KeyUp事件时,既不会修改输入框的value,也不会触发change事件,因此MyValue始终保持初始值(空),导致后续回车逻辑无法正常执行。

解决方案

方案1:手动维护输入框value并触发对应事件

如果需要严格模拟逐个按键的输入过程,需在每次模拟KeyUp前手动更新输入框的value属性:

var textBox = cut.Find("input");

// 输入"v"
textBox.SetAttribute("value", "v");
textBox.KeyUp("v");

// 输入"a"
textBox.SetAttribute("value", "va");
textBox.KeyUp("a");

// 输入"l"
textBox.SetAttribute("value", "val");
textBox.KeyUp("l");

// 输入空格
textBox.SetAttribute("value", "val ");
textBox.KeyUp(Key.Space);

// 输入"2"
textBox.SetAttribute("value", "val 2");
textBox.KeyUp("2");

// 触发回车
textBox.KeyUp(Key.Enter);

方案2:直接设置最终值并触发必要事件(更高效)

若无需严格模拟逐个按键,可直接设置输入框的最终值,触发change事件同步MyValue,再模拟回车:

var textBox = cut.Find("input");

// 设置输入框的值
textBox.SetAttribute("value", "val 2");
// 触发change事件,同步MyValue
textBox.Change();
// 模拟回车按键
textBox.KeyUp(Key.Enter);

额外注意点

  1. 你的测试初始断言cut.Find(".mud-chip-content").TextContent.Should().Be("val 1"),但传入的values是空列表,需确保MyComponent初始化时会默认添加该值,否则此断言会失败。
  2. 触发回车后,MyValue会被清空,可通过断言输入框的value为空来验证此逻辑。

内容的提问来源于stack exchange,提问作者dzenesiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:42:50