Unit-тесты views в add-ons

Добрый день,

Пробую писать unit-тесты для views в add-on (версия jmix 2.0.2). При запуске теста получаю ошибку “Failed to instantiate [io.jmix.flowui.view.DefaultMainViewParent]”.

Stacktrace:

Failed to instantiate [io.jmix.flowui.view.DefaultMainViewParent]: Specified class is an interface
org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.jmix.flowui.view.DefaultMainViewParent]: Specified class is an interface
	at app//org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:76)
	at app//org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1308)
	at app//org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1199)
	at app//org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560)
	at app//org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
	at app//org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:320)
	at app//com.vaadin.flow.spring.SpringInstantiator.getOrCreate(SpringInstantiator.java:121)
	at app//io.jmix.flowui.sys.vaadin.JmixSpringInstantiator.getOrCreate(JmixSpringInstantiator.java:42)
	at app//com.vaadin.flow.di.Instantiator.createRouteTarget(Instantiator.java:136)
	at app//com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.lambda$getRouteTarget$1(AbstractNavigationStateRenderer.java:133)
	at java.base@17.0.8.1/java.util.Optional.orElseGet(Optional.java:364)
	at app//com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.getRouteTarget(AbstractNavigationStateRenderer.java:132)
	at app//com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.sendBeforeEnterEventAndPopulateChain(AbstractNavigationStateRenderer.java:493)
	at app//com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.createChainIfEmptyAndExecuteBeforeEnterNavigation(AbstractNavigationStateRenderer.java:474)
	at app//com.vaadin.flow.router.internal.AbstractNavigationStateRenderer.handle(AbstractNavigationStateRenderer.java:212)
	at app//com.vaadin.flow.component.internal.JavaScriptNavigationStateRenderer.handle(JavaScriptNavigationStateRenderer.java:78)
	at app//com.vaadin.flow.component.UI.handleNavigation(UI.java:1785)
	at app//com.vaadin.flow.component.UI.navigate(UI.java:1170)
	at app//io.jmix.flowui.view.navigation.ViewNavigationSupport.navigate(ViewNavigationSupport.java:56)
	at app//io.jmix.flowui.testassist.navigation.ViewNavigationDelegate.processNavigation(ViewNavigationDelegate.java:77)
	at app//io.jmix.flowui.testassist.navigation.TestViewNavigationProcessor.processNavigation(TestViewNavigationProcessor.java:59)
	at app//io.jmix.flowui.testassist.navigation.TestViewNavigationProcessor.processNavigation(TestViewNavigationProcessor.java:41)
	at app//io.jmix.flowui.view.navigation.AbstractViewNavigator.navigate(AbstractViewNavigator.java:143)
	at app//com.company.jmix_flowui_addon.view.TestViewTest.testNavigate(TestViewTest.java:23)

Код теста:

@UiTest
@SpringBootTest(classes = {SbConfiguration.class, FlowuiTestAssistConfiguration.class})
public class TestViewTest {

    @Autowired
    ViewNavigators viewNavigators;

    @Test
    void testNavigate() {
        viewNavigators.view(TestView.class).navigate();
        var testView = UiTestUtils.<TestView>getCurrentView();
        assertTrue(testView.isVisible());
    }

}

Как я понимаю, проблема в том, что в JmixUiTestExtension не реализована поддержка DefaultMainViewParent. Если расширить JmixUiTestExtension и добавить специальную обработку DefaultMainViewParent (аналогично методу ViewRegistry#getParentChain) тесты проходят корректно.

Добрый день.

Хорошее замечание, создал тикет на поддержку UI тестов в аддонах: UiTests support in add-ons · Issue #2219 · jmix-framework/jmix · GitHub
Спасибо за информацию.

С уважением,
Дмитрий

1 симпатия