Building & Testing
Comprehensive testing strategies and best practices for ensuring code quality and reliability in MegaVault.
Table of Contents
Testing Overview
MegaVault employs a multi-layered testing approach covering unit tests, integration tests, end-to-end tests, and mobile testing to ensure reliability and user experience.
Testing Stack
Modern testing tools
- ✅ Jest for unit testing
- ✅ React Testing Library
- ✅ Playwright for E2E
- ✅ Flutter testing framework
Coverage Goals
Quality metrics
- ✅ 80%+ code coverage
- ✅ All critical paths tested
- ✅ Performance monitoring
- ✅ Automated CI/CD testing
Test Types
Comprehensive coverage
- ✅ Unit tests (70%)
- ✅ Integration tests (20%)
- ✅ E2E tests (10%)
- ✅ Mobile tests
💡
Testing Philosophy
Our testing approach prioritizes fast feedback loops, user-focused scenarios, and comprehensive coverage of critical functionality.
Unit Testing
Unit tests provide fast feedback and ensure individual components work correctly.
Component Testing
Button.test.tsx
import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { Button } from '@/components/ui/Button';
describe('Button Component', () => {
it('renders and handles clicks', async () => {
const handleClick = jest.fn();
render(<Button onClick={handleClick}>Click me</Button>);
await userEvent.click(screen.getByRole('button'));
expect(handleClick).toHaveBeenCalledTimes(1);
});
it('shows loading state', () => {
render(<Button loading>Loading</Button>);
expect(screen.getByText('Loading...')).toBeInTheDocument();
expect(screen.getByRole('button')).toBeDisabled();
});
});Hook Testing
useAuth.test.ts
import { renderHook, act } from '@testing-library/react';
import { useAuth } from '@/hooks/useAuth';
describe('useAuth Hook', () => {
it('handles login flow', async () => {
const { result } = renderHook(() => useAuth());
await act(async () => {
await result.current.login('test@example.com', 'password');
});
expect(result.current.isAuthenticated).toBe(true);
});
});Running Tests
Test Commands
# Run all tests
npm run test
# Run with coverage
npm run test:coverage
# Run in watch mode
npm run test:watch
# Run specific test
npm run test Button.test.tsxIntegration Testing
Integration tests verify API endpoints and service interactions work correctly.
API Testing
import { createMocks } from 'node-mocks-http';
import handler from '@/app/api/auth/signin/route';
describe('/api/auth/signin', () => {
it('authenticates valid user', async () => {
const { req, res } = createMocks({
method: 'POST',
body: { email: 'test@example.com', password: 'password' },
});
await handler(req, res);
expect(res._getStatusCode()).toBe(200);
});
});End-to-End Testing
E2E tests validate complete user workflows using Playwright.
User Flow Test
import { test, expect } from '@playwright/test';
test('file upload workflow', async ({ page }) => {
// Login
await page.goto('/auth/signin');
await page.fill('[data-testid=email]', 'test@example.com');
await page.fill('[data-testid=password]', 'password123');
await page.click('[data-testid=signin-button]');
// Upload file
await page.goto('/dashboard/files');
const fileChooser = page.waitForEvent('filechooser');
await page.click('[data-testid=upload-button]');
const chooser = await fileChooser;
await chooser.setFiles('test-file.pdf');
// Verify upload
await expect(page.locator('[data-testid=file-list]')).toContainText('test-file.pdf');
});Running E2E Tests
Playwright Commands
# Run E2E tests
npm run test:e2e
# Run with UI
npm run test:e2e:ui
# Run specific browser
npx playwright test --project=chromiumMobile Testing
Flutter mobile app testing includes widget tests and integration tests.
Widget Test
import 'package:flutter_test/flutter_test.dart';
import 'package:megavault/widgets/file_list.dart';
void main() {
testWidgets('FileList displays files', (WidgetTester tester) async {
await tester.pumpWidget(FileList(files: mockFiles));
expect(find.text('document.pdf'), findsOneWidget);
});
}Flutter Test Commands
# Run mobile tests
cd megavault_mobile
flutter test
# Run with coverage
flutter test --coverage
# Integration tests
flutter test integration_test/CI/CD Integration
Automated testing pipeline ensures code quality before deployment.
GitHub Actions
name: Test Suite
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '18'
- run: npm ci
- run: npm run lint
- run: npm run test:ci
- run: npm run test:e2e
- name: Upload coverage
uses: codecov/codecov-action@v3✅
Quality Gates
All tests must pass, coverage above 80%, and no linting errors before merge.