我正在用 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 测试,我已经被困了一个星期了。
这很奇怪。您使用的是正确的 Karibu-Testing 版本,因此该部分没问题。当
_get()
失败时,它将转储 UI 中嵌套的整个组件树。您看到转储中的对话框了吗?它应该作为 MockedUI
的直接子级附加。
没有更多信息,我只能猜测,但这里有一些提示:
_get<Dialog>()
应该找到一个附加到 UI 的对话框。这会在您拨打 dialog.open()
后发生。也许由于某种原因没有调用dialog.open()
?ConfirmDialog
不是 Dialog
,因此如果查找 ConfirmDialog
,您需要拨打 _get<ConfirmDialog>()
。我也遇到了这个问题,但我正在运行集成测试并且使用自定义的TestingLifecycleHook。 我找到的解决方案是在 _get() 之前添加
MockVaadin.clientRoundtrip();
。
Dialog 默认情况下会延迟附加自身,而 clientRoundtrip() 会强制急切附加。您可以参考我的问题这里