Spaces:
Sleeping
Sleeping
# RobotHub TransportServer JavaScript Client Tests | |
## Overview | |
This directory contains comprehensive tests for the RobotHub TransportServer JavaScript/TypeScript client library, mirroring the Python test structure. The tests are built using [Bun's test framework](https://bun.sh/docs/test/writing) and provide full coverage of both robotics and video functionality. | |
## Test Structure | |
The test suite is organized to match the Python client tests: | |
``` | |
tests/ | |
βββ setup.ts # Test utilities and helpers (equivalent to conftest.py) | |
βββ producer.test.ts # RoboticsProducer tests | |
βββ consumer.test.ts # RoboticsConsumer tests | |
βββ factory.test.ts # Factory function tests | |
βββ integration.test.ts # Integration tests | |
βββ rest-api.test.ts # REST API tests | |
βββ video-client.test.ts # Video client tests | |
βββ README.md # This file | |
``` | |
## Running Tests | |
### Prerequisites | |
1. **Server Running**: Ensure the RobotHub TransportServer is running on `http://localhost:8000` | |
2. **Dependencies**: Install dependencies with `bun install` | |
### Run All Tests | |
```bash | |
# From the js client directory | |
bun test | |
# Or using npm script | |
bun run test | |
``` | |
### Run Specific Test Files | |
```bash | |
# Run only producer tests | |
bun test tests/producer.test.ts | |
# Run only integration tests | |
bun test tests/integration.test.ts | |
# Run with verbose output | |
bun test --verbose | |
``` | |
## Test Categories | |
### 1. Robotics Producer Tests (`producer.test.ts`) | |
- β Basic connection and disconnection | |
- β Connection info validation | |
- β Joint updates and state synchronization | |
- β Emergency stop functionality | |
- β Event callbacks (connected, disconnected, error) | |
- β Error handling for disconnected operations | |
- β Multiple room connections | |
- β Custom participant IDs | |
- β Large data handling | |
- β High-frequency updates | |
### 2. Robotics Consumer Tests (`consumer.test.ts`) | |
- β Basic connection and disconnection | |
- β Connection info validation | |
- β State synchronization retrieval | |
- β Event callbacks setup | |
- β Multiple consumers in same room | |
- β Receiving state sync and joint updates | |
- β Emergency stop reception | |
- β Custom participant IDs | |
- β Reconnection scenarios | |
- β State persistence after producer updates | |
### 3. Factory Function Tests (`factory.test.ts`) | |
- β Client creation by role | |
- β Invalid role handling | |
- β Auto room creation for producers | |
- β Specific room connection | |
- β Producer-consumer pair creation | |
- β Default URL handling | |
- β Multiple producer management | |
- β Nonexistent room error handling | |
### 4. Integration Tests (`integration.test.ts`) | |
- β Full producer-consumer workflow | |
- β Multiple consumers receiving same data | |
- β Emergency stop propagation | |
- β Producer reconnection scenarios | |
- β Late-joining consumers | |
- β Room state persistence | |
- β High-frequency update handling | |
### 5. REST API Tests (`rest-api.test.ts`) | |
- β Room listing (empty and populated) | |
- β Room creation (auto and custom IDs) | |
- β Room information retrieval | |
- β Room state retrieval | |
- β Room deletion | |
- β Error handling for nonexistent rooms | |
### 6. Video Client Tests (`video-client.test.ts`) | |
- β Type definitions validation | |
- β Producer and consumer creation | |
- β Room creation and listing (when server available) | |
- β Connection validation | |
- β Factory function existence | |
- β Mock frame source functionality | |
- β Configuration type validation | |
## Test Results Summary | |
``` | |
β 69 tests passed | |
β 0 tests failed | |
π 187 expect() calls | |
β±οΈ Runtime: ~4 seconds | |
``` | |
## API Correspondence | |
The JavaScript tests mirror the Python test structure, ensuring API parity: | |
| Python Test | JavaScript Test | Coverage | | |
|-------------|-----------------|----------| | |
| `test_producer.py` | `producer.test.ts` | β Complete | | |
| `test_consumer.py` | `consumer.test.ts` | β Complete | | |
| `test_factory_functions.py` | `factory.test.ts` | β Complete | | |
| `test_integration.py` | `integration.test.ts` | β Complete | | |
| `test_rest_api.py` | `rest-api.test.ts` | β Complete | | |
| `test_video_client.py` | `video-client.test.ts` | β Complete | | |
| `conftest.py` | `setup.ts` | β Complete | | |
## Test Features | |
### Async/Await Support | |
All tests use modern async/await patterns with proper cleanup: | |
```typescript | |
test("producer connection", async () => { | |
const { workspaceId, roomId } = await producer.createRoom(); | |
await producer.connect(workspaceId, roomId); | |
expect(producer.isConnected()).toBe(true); | |
await producer.disconnect(); | |
}); | |
``` | |
### Message Collection | |
Tests use a `MessageCollector` utility for testing callbacks: | |
```typescript | |
const updateCollector = new MessageCollector(1); | |
consumer.onJointUpdate(updateCollector.collect); | |
await producer.sendJointUpdate(joints); | |
const updates = await updateCollector.waitForMessages(2000); | |
expect(updates.length).toBeGreaterThanOrEqual(1); | |
``` | |
### Resource Management | |
Automatic cleanup prevents test interference: | |
```typescript | |
afterEach(async () => { | |
if (producer.isConnected()) { | |
await producer.disconnect(); | |
} | |
await roomManager.cleanup(producer); | |
}); | |
``` | |
### Error Testing | |
Comprehensive error scenario coverage: | |
```typescript | |
test("send without connection", async () => { | |
await expect(producer.sendJointUpdate([])) | |
.rejects.toThrow("Must be connected"); | |
}); | |
``` | |
## Debugging Tests | |
### Enable Debug Logging | |
```bash | |
# Run with debug output | |
DEBUG=* bun test | |
# Or specific modules | |
DEBUG=robotics:* bun test | |
``` | |
### Test Individual Scenarios | |
```bash | |
# Test specific functionality | |
bun test --grep "emergency stop" | |
bun test --grep "multiple consumers" | |
``` | |
### Server Connectivity Issues | |
If tests fail due to server connectivity: | |
1. Ensure server is running: `curl http://localhost:8000/health` | |
2. Check server logs for errors | |
3. Verify WebSocket connections are allowed | |
4. Try running tests with longer timeouts | |
## Contributing | |
When adding new tests: | |
1. Follow the existing naming conventions | |
2. Add proper cleanup in `afterEach` blocks | |
3. Use `MessageCollector` for callback testing | |
4. Test both success and error scenarios | |
5. Update this README with new test descriptions | |
## Performance Notes | |
- Tests run in parallel by default | |
- Average test suite runtime: ~4 seconds | |
- Individual test timeouts: 10 seconds | |
- Message collection timeouts: 2-5 seconds | |
The JavaScript test suite provides comprehensive validation that the TypeScript/JavaScript client maintains full API compatibility with the Python client while leveraging modern JavaScript testing practices. |