为什么 bUnit 中的 TextEditChange() 突然不起作用

Why is a TextEditChange() in bUnit suddenly not working

提问人:David Thielen 提问时间:11/17/2023 最后编辑:David Thielen 更新时间:11/20/2023 访问量:20

问:

这曾经有效,现在不行了。这是一个非常简单的页面。我使用 DevExpress,并且是 .emailTextBoxDxTextBox

这是成功的

var emailTextBox = allTextBoxes.Single(x => x.Instance.InputId == "email");

emailTextBox.TextEditChange("");
button.Click();
var li = renderedComponent.Find("li.validation-message");
Assert.NotNull(li);
Assert.Equal("Your Email is required", li.InnerHtml);
Assert.Equal("", pageModel.Email);

然后,此代码立即跟随 - 并失败。

emailTextBox.TextEditChange("bogus");
button.Click();
li = renderedComponent.Find("li.validation-message");
Assert.NotNull(li);
Assert.Equal("The Email field is not a valid e-mail address.", li.InnerHtml);
Assert.Equal("bogus", pageModel.Email);

问题是:

  1. 它找到的错误消息是空字段的消息。
  2. pageModel.Email是 “”。
  3. 在我查看的调试器中,它是“”。emailTextBox.Text

设置值的方法不对吗?TextEditChange()DxTextBox

更新:

有时,上面的第二次测试随机通过,但随后类似的下一次测试失败。这些测试假定不仅设置了值,而且 和 随后运行。<input><DataAnnotationsValidator/><ValidationSummary/>

更新2:

以下作品:

emailTextBox.TextEditChange("bogus");
button.Click();
renderedComponent.Render();
li = renderedComponent.Find("li.validation-message");
Assert.NotNull(li);
Assert.Equal("The Email field is not a valid e-mail address.", li.InnerHtml);
Assert.Equal("bogus", pageModel.Email);

是否需要在 TextEditChange/Click 之后调用?renderedComponent.Render()

Blazor DevExpress blazor-server-side bunit

评论


答:

0赞 David Thielen 11/20/2023 #1

在这方面,我从bUnit团队那里得到了很多帮助,基本答案是双重的。

首先,我需要将每个 & 测试都设置为单独的单元测试。连续做几个是自找麻烦,因为页面元素都保持不变,只是文本发生了变化。TextEditChange()Click()

其次,做一个,通常在有超时的时候。因此,单元测试不是通过断言值来测试预期的更改,而是通过抛出异常来测试预期的更改,如果预期的更改未在超时之前呈现。WaitForrenderedComponent.Find()

emailTextBox.TextEditChange("bogus");
button.Click();
var li = renderedComponent.WaitForElement("li.validation-message", Timeout);
Assert.NotNull(li);