Package Exports
- @closure-next/testing
Readme
Closure Next Testing Utilities
Testing utilities for Closure Next components, providing Jest matchers and Cypress commands.
Installation
npm install @closure-next/testingJest Usage
import { createMockComponent, mountComponent, simulateEvent } from '@closure-next/testing/jest';
import { MyComponent } from './my-component';
describe('MyComponent', () => {
it('should render correctly', () => {
const { component } = mountComponent(MyComponent, {
title: 'Test'
});
expect(component).toBeRendered();
});
it('should handle events', () => {
const { component } = mountComponent(MyComponent);
simulateEvent(component, 'click');
expect(component).toHaveState(ComponentState.ACTIVE);
});
});Cypress Usage
import { MyComponent } from './my-component';
describe('MyComponent', () => {
it('should render and interact', () => {
cy.mountClosureComponent(MyComponent, {
title: 'Test'
})
.getClosureElement()
.should('be.visible')
.triggerClosureEvent('click')
.shouldHaveState(ComponentState.ACTIVE);
});
});Features
- ๐งช Custom Jest matchers
- ๐ Cypress commands
- ๐ญ Component mocking
- โก๏ธ Event simulation
- ๐ Async utilities
API Reference
Jest Utilities
createMockComponent<T extends Component>(ComponentClass, props?)
Creates a mock component for testing.
mountComponent<T extends Component>(ComponentClass, props?)
Mounts a component in a test container.
simulateEvent(component, eventType, eventInit?)
Simulates events on components.
waitForUpdate()
Waits for component updates.
Custom Jest Matchers
toBeRendered()toHaveState(state)toHaveChildren(count)
Cypress Commands
mountClosureComponent(ComponentClass, props?)getClosureElement()triggerClosureEvent(eventType, eventInit?)shouldHaveState(state)
Examples
Jest Testing
import { ComponentState } from '@closure-next/core';
import { mountComponent } from '@closure-next/testing/jest';
test('component lifecycle', async () => {
// Mount component
const { component } = mountComponent(MyComponent);
expect(component).toBeRendered();
// Simulate interaction
simulateEvent(component, 'click');
expect(component).toHaveState(ComponentState.ACTIVE);
// Wait for updates
await waitForUpdate();
expect(component).toHaveChildren(2);
});Cypress Testing
import { ComponentState } from '@closure-next/core';
describe('Component Integration', () => {
it('should integrate with other components', () => {
cy.mountClosureComponent(ParentComponent)
.getClosureElement()
.find('[data-child]')
.should('have.length', 2)
.first()
.triggerClosureEvent('click')
.shouldHaveState(ComponentState.SELECTED);
});
});Development
# Build the package
npm run build
# Run tests
npm testLicense
Apache-2.0