返回 Skill 列表
extension
分类: 开发与工程无需 API Key

karibu-test

创建Karibu服务器端单元测试,用于覆盖Vaadin视图中的导航、组件交互、表单验证、网格操作和通知。当用户要求“编写Karibu测试”、“对Vaadin视图进行单元测试”、“测试UI服务器端”、“创建视图测试”,或提到Karibu测试、Vaadin单元测试或服务器端UI测试时使用。

person作者: jakexiaohubgithub

Karibu Test

Instructions

Create Karibu unit tests for Vaadin views based on the use case $ARGUMENTS. 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 | assertThat(GridKt._size(grid)).isEqualTo(10) | | Component visible | assertThat(button.isVisible()).isTrue() | | Component enabled | assertThat(button.isEnabled()).isTrue() | | Field value | assertThat(textField.getValue()).isEqualTo("x") | | Collection size | assertThat(items).hasSize(5) | | Notifications | expectNotifications("Success") |

Workflow

  1. Read the use case specification
  2. Use TodoWrite to create a task for each test scenario
  3. Create test class using the template
  4. For each test:
    • Navigate to the view
    • Find components using LocatorJ
    • Perform interactions
    • Assert expected outcomes
    • Clean up test data if created during test
  5. Run tests to verify they pass
  6. If a test fails:
    • Check component locators with _dump() to inspect the component tree
    • Verify test data exists in the Flyway test migrations
    • Ensure navigation to the correct view before finding components
  7. 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