testing - 为什么 bUnit 告诉我它不能“单击”按钮,因为元素没有 onclick 事件处理程序,即使它有?

这是它在 .RAZOR 页面中显示的元素:

<button id="@(theID)" type="button" class="btn btn-primary" onclick="window.open('https://www.google.com/');">Do Something</button>

我在 bUnit 测试 .CS 文件中有这个语句:

IElement theButton = cut.Find("button[id=\"" + theID + "\"]");
exportButton.MarkupMatches("<button id=\"" + theID + "\" type=\"button\" class=\"btn btn-primary\" onclick=\"window.open('https://www.google.com/');\">Do Something</button>");
exportButton.Click();

bUnit 通过了 exportButton.MarkupMatches() 测试,因为这是 bUnit 接收的标记中的内容:

<button id="abc123" type="button" class="btn btn-primary" onclick="window.open('https://www.google.com/');">Do Something</button>

但是,bUnit 失败的是 Click()。错误信息是这样的:

My.Domain.Tests.TestTheThing
    Source: MyAwesomeTest.razor line N
    Duration: 485 ms

    Message:
        Bunit.MissingEventHandlerException : The element does not have an event handler for the event 'onclick', nor any other events.

    Stack Trace:
        TriggerEventDispatchExtensions.TriggerBubblingEventAsync(ITestRenderer renderer, IElement element, String eventName, EventArgs eventArgs) line 102
        TriggerEventDispatchExtensions.TriggerEventAsync(IElement element, String eventName, EventArgs eventArgs) line 76
        MouseEventDispatchExtensions.ClickAsync(IElement element, MouseEventArgs eventArgs) line 373
        MouseEventDispatchExtensions.Click(IElement element, Int64 detail, Double screenX, Double screenY, Double clientX, Double clientY, Double offsetX, Double offsetY, Int64 button, Int64 buttons, Boolean ctrlKey, Boolean shiftKey, Boolean altKey, Boolean metaKey, String type) line 322
        MyAwesomeTest.TestTheThing() line N
        <>c.<ThrowAsync>b__140_0(Object state)

从 bUnit 接收的标记中可以清楚地看到:

<button id="abc123" type="button" class="btn btn-primary" onclick="window.open('https://www.google.com/');">Do Something</button>

确实有一个 onclick 事件需要处理。

那么为什么测试失败了呢?为什么 bUnit 说没有可处理的事件,即使有。

回答1

您不是绑定到 C# 事件处理程序,而是绑定到 JavaScript 事件处理程序。 bUnit 只能触发 C# 事件处理程序,也就是。以 @ 开头的那些,例如@onclick

这是因为 bUnit 不运行 JavaScript,所以你不能用它来测试你的 HTML 中的在线 JavaScript。将您的 JavaScript 放入 .js 文件中的函数中,然后由 Jsinterop 调用它。然后你可以使用 bUnit 的 JSInterop 实现来验证函数是否被调用。

更多相关信息:https://bunit.dev/docs/test-doubles/emulating-ijsruntime.html

相似文章

javascript - 为什么红细胞会移动? javascript

我有这个学校的评估,在table中有一个隐藏的单元格,你将不得不尝试找到它。我的问题是,当单击同一行中的另一个单元格时,不正确(红色)的方块会移动。如果单元格不正确并且不移动,我希望它保持红色。我不知...

jquery - 如何让输入 value 出现?

您好,我是编码新手,我必须为学校做这个作业,我只是有点卡在这部分作业上。我需要能够做到,当有人在输入框中输入他们的名字时,这个名字就会出现在下一页上。我怎么能做到这一点?如果您需要或想查看它,我的代码...

javascript - 使用 javascript 选择随机隐藏单元格

我是编码新手,我必须在javascript中制作一个游戏,其中随机选择单元格,玩家必须尝试猜测table中的正确单元格(随机选择的单元格)。然后它应该告诉您您选择了正确的单元格。我无法弄清楚如何做到这...

最新文章