<dependency>
<groupId>org.linkki-framework</groupId>
<artifactId>linkki-vaadin-flow-test</artifactId>
</dependency>
Testing
Unit testing with Karibu-Testing
Karibu-Testing provides functionality to write browserless server-side JUnit Tests for Vaadin applications.
This allows calls such as UI.getCurrent() in a regular JUnit test by mocking VaadinSession, CurrentRequest and others.
linkki provides an extension of Karibu Testing.
Maven Dependency
Mock Vaadin setup with KaribuUIExtension
While some of the UI components created with Vaadin can be tested easily in a regular unit test, the setup gets difficult when dialogs, locales or routing are involved.
Karibu makes it easier by the class MockVaadinUI which not only set up a UI instance along with the session, but also can handle routes.
The linkki Karibu module further simplify the set-up with the JUnit extension KaribuUIExtension.
Simple set-up: KaribuUIExtension with @ExtendWith
In the most simple use case, this class can be directly annotated on the test class with @ExtendWith(KaribuUIExtension.class).
This will make sure that the Vaadin UI is set up in beforeEach and is cleaned up properly in afterEach.
Additionally, a test using KaribuUIExtension can be annotated with @WithLocale to define the UI’s locale, defaulting to german.
+ .KaribuUIExtension with @ExtendWith
@ExtendWith(KaribuUIExtension.class)
class SimpleTestClass {
@Test
void testUI() {
assertThat(UI.getCurrent()).isNotNull();
}
}
Complex configuration of KaribuUIExtension
KaribuUIExtension can also be used for more complex configurations. It provides factory methods with which a configuration can be passed. The configuration can be for exampled used to:
-
add routes
-
add error routes
-
add instances for parent layouts
-
define whether the deployment is in production mode or
-
define the locale.
To use the configuration, the KaribuUIExtension must be used with @RegisterExtension.
class RegisterExtensionWithConfiguration {
@RegisterExtension
static KaribuUIExtension extension = KaribuUIExtension
.withConfiguration(withDefaults()
.setProductionMode(true)
.addRoute(MyView.class, () -> myView)
.addRoutes(ViewWithParentLayout.class,
ViewWithException.class)
.addErrorRoutes(ErrorPage.class)
.addInstance(ParentLayout.class, ParentLayout::new));
...
}
Locale
The locale can be either set with the annotation @WithLocale, or with the method setLocale in the configuration.
@WithLocale("en")
@ExtendWith(KaribuUIExtension.class)
class SimpleTestClassWithLocaleEn {
@Test
void testLocale() {
assertThat(UI.getCurrent().getLocale()).isEqualTo(Locale.ENGLISH);
}
}
Finding elements and writing assertions
Karibu provides a class LocatorJ that provides many useful methods to find elements, most notably _find and _get.
In addition, the class also provides several methods for assertions such as _assertOne which provides a very useful failure message.
The linkki extension for Karibu testing offers additional functionalities in the utility class KaribuUtils.
The functionalities include
-
methods for printing out any component as String. This can be used to assert that a certain text is or is not displayed anywhere within the given component, disregarding the placement or the actual component that is used
-
methods for handling value change events in input fields
-
methods for handling grids
-
methods for handling layouts created with a PMO
-
methods for handling
Notificationcomponents that are created withNotificationUtil -
methods for handling
OkCancelDialog -
support for push UI