Claude-skill-registry karibu-tester
Creates Karibu unit tests for Vaadin views.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/karibu-tester" ~/.claude/skills/majiayu000-claude-skill-registry-karibu-tester && rm -rf "$T"
manifest:
skills/data/karibu-tester/SKILL.mdsource content
Karibu Test Writer
Instructions
Create Karibu unit tests for Vaadin views. Karibu Testing allows server-side testing of Vaadin components without a browser.
Use the KaribuTesting MCP server for documentation and code generation.
DO NOT
- Use Mockito for mocking
- Use @Transactional annotation (transaction boundaries must stay intact)
- Use services, repositories, or DSLContext to create test data
- Delete all data in cleanup (only remove data created during the test)
- Use browser-based testing patterns (this is server-side testing)
Test Data Strategy
Create test data using Flyway migrations in
src/test/resources/db/migration.
| Approach | Location | Purpose |
|---|---|---|
| Flyway migration | src/test/resources/db/migration/V*.sql | Populate test data |
| Manual cleanup | @AfterEach method | Remove test-created data |
Key Helper Classes
| Class | Purpose |
|---|---|
| com.github.mvysny.kaributesting.v10.LocatorJ | Find components |
| com.github.mvysny.kaributesting.v10.GridKt | Grid assertions and interactions |
| com.github.mvysny.kaributesting.v10.NotificationsKt | Notification assertions |
| com.github.mvysny.kaributesting.v10.pro.ConfirmDialogKt | ConfirmDialog interactions |
Template
Use templates/ExampleViewTest.java as the test class structure.
Common Patterns
Navigate to View
UI.getCurrent(). navigate(PersonView .class);
Find Components
// Find by type var grid = _get(Grid.class); var button = _get(Button.class, spec -> spec.withCaption("Save")); var textField = _get(TextField.class, spec -> spec.withLabel("Name")); // Find all matching List<Button> buttons = _find(Button.class);
Grid Operations
// Get grid size assertThat(GridKt._size(grid)). isEqualTo(100); // Get selected items Set<PersonRecord> selected = grid.getSelectedItems(); // Select a row GridKt. _selectRow(grid, 0); // Get cell component (for action buttons) GridKt. _getCellComponent(grid, 0,"actions") . getChildren() . filter(Button .class::isInstance) . findFirst() . map(Button .class::cast) . ifPresent(Button::click); // Get cell value String name = GridKt._getFormattedRow(grid, 0).get("name");
Form Interactions
// Set field values _get(TextField .class, spec ->spec. withLabel("Name")). _setValue("John"); _get(ComboBox .class, spec ->spec. withLabel("Country")). _setValue(country); _get(DatePicker .class, spec ->spec. withLabel("Birth Date")). _setValue(LocalDate.of(1990, 1,1)); // Click button _get(Button .class, spec ->spec. withCaption("Save")). _click();
Notification Assertions
// Expect notification expectNotifications("Record saved successfully"); // Assert no notifications assertThat(NotificationsKt.getNotifications()). isEmpty();
ConfirmDialog
// Click confirm in dialog ConfirmDialogKt._fireConfirm(_get(ConfirmDialog.class)); // Click cancel ConfirmDialogKt. _fireCancel(_get(ConfirmDialog.class));
Assertions Reference
Use AssertJ or Karibu Testing assertions:
| Assertion Type | Example |
|---|---|
| Grid size | |
| Component visible | |
| Component enabled | |
| Field value | |
| Collection size | |
| Notifications | |
Workflow
- Read the use case specification
- Use TodoWrite to create a task for each test scenario
- Create test class using the template
- For each test:
- Navigate to the view
- Find components using LocatorJ
- Perform interactions
- Assert expected outcomes
- Clean up test data if created during test
- Run tests to verify
- Mark todos complete
Resources
- Karibu Testing documentation: https://github.com/mvysny/karibu-testing/tree/master/karibu-testing-v10
- Use the KaribuTesting MCP server for additional patterns