Добрый день,
Пробую писать 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
) тесты проходят корректно.