Karibu 单元测试时 MockedUI 中没有可见对话框

问题描述 投票:0回答:2

我正在用 Kotlin 编码。我正在尝试将我的项目从 Vaadin 22 迁移到 Vaadin 23.3。我正在使用 Karibu Testing 1.3.23 进行 Vaadin 单元测试。

当我尝试:

val dialog = _get<Dialog>()
在单元测试中时,出现以下错误:
java.lang.AssertionError: /: No visible Dialog in MockedUI["<description_of_mocked_UI>"] matching Dialog: [].

从我迄今为止的调查来看,我了解到我的单元测试在以下 Karibu 函数处抛出断言错误:

public fun <T: Component> Component._find(clazz: Class<T>, block: SearchSpec<T>.()->Unit = {}): List<T>
经过一定次数的迭代后。

对此有什么想法吗?这是我第一次从事 Karibu 测试,我已经被困了一个星期了。

kotlin unit-testing vaadin
2个回答
1
投票

这很奇怪。您使用的是正确的 Karibu-Testing 版本,因此该部分没问题。当

_get()
失败时,它将转储 UI 中嵌套的整个组件树。您看到转储中的对话框了吗?它应该作为
MockedUI
的直接子级附加。

没有更多信息,我只能猜测,但这里有一些提示:

    如果
  • _get<Dialog>()
    应该找到一个附加到 UI 的对话框。这会在您拨打
    dialog.open()
    后发生。也许由于某种原因没有调用
    dialog.open()
  • 另外,请注意
    ConfirmDialog
    不是
    Dialog
    ,因此如果查找
    ConfirmDialog
    ,您需要拨打
    _get<ConfirmDialog>()

0
投票

我也遇到了这个问题,但我正在运行集成测试并且使用自定义的TestingLifecycleHook。 我找到的解决方案是在 _get() 之前添加

MockVaadin.clientRoundtrip();

Dialog 默认情况下会延迟附加自身,而 clientRoundtrip() 会强制急切附加。您可以参考我的问题这里

© www.soinside.com 2019 - 2024. All rights reserved.