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);
额外注意点
- 你的测试初始断言
cut.Find(".mud-chip-content").TextContent.Should().Be("val 1"),但传入的values是空列表,需确保MyComponent初始化时会默认添加该值,否则此断言会失败。 - 触发回车后,
MyValue会被清空,可通过断言输入框的value为空来验证此逻辑。
内容的提问来源于stack exchange,提问作者dzenesiz
相关产品推荐
相关产品推荐

