mirror of
https://github.com/formbricks/formbricks.git
synced 2026-01-05 08:59:55 -06:00
130 lines
3.0 KiB
Plaintext
130 lines
3.0 KiB
Plaintext
---
|
|
title: "Testing Methodology"
|
|
description: "How we test Formbricks to ensure reliability, performance, and high-quality code."
|
|
icon: magnifying-glass
|
|
---
|
|
|
|
## Overview
|
|
|
|
At Formbricks, we maintain a rigorous testing strategy to ensure high-quality code and reliable functionality. Our testing approach is standardized and integrated into our development workflow.
|
|
|
|
## Testing Structure
|
|
|
|
### Unit Testing with Vitest
|
|
|
|
We use Vitest as our primary testing framework. All unit tests follow these conventions:
|
|
|
|
1. **File Location and Naming**
|
|
|
|
- Test files are co-located with the source files they test
|
|
- Test files use the `.test.ts` extension (e.g., `utils.test.ts` tests `utils.ts`)
|
|
|
|
2. **Test Organization**
|
|
|
|
```typescript
|
|
import { describe, expect, test } from "vitest";
|
|
|
|
describe("ComponentName or FeatureName", () => {
|
|
describe("functionName or scenario", () => {
|
|
// We use the `test` function instead of `it` throught our test suite
|
|
test("should describe expected behavior", () => {
|
|
// test implementation
|
|
});
|
|
});
|
|
});
|
|
```
|
|
|
|
3. **Coverage Requirements**
|
|
- Minimum 85% code coverage requirement (WIP 👷♂️)
|
|
- Coverage is tracked using V8 provider
|
|
- Coverage reports include:
|
|
- Text summaries
|
|
- HTML reports
|
|
- LCOV reports
|
|
|
|
### End-to-End Testing with Playwright
|
|
|
|
E2E tests are located in `apps/web/playwright/` and focus on critical user workflows.
|
|
|
|
## Testing Setup
|
|
|
|
### Configuration
|
|
|
|
Our Vitest configuration (`vite.config.ts`) includes:
|
|
|
|
```typescript
|
|
test: {
|
|
exclude: ['playwright/', 'node_modules/'],
|
|
setupFiles: ['../../packages/lib/vitestSetup.ts'],
|
|
coverage: {
|
|
provider: 'v8',
|
|
reporter: ['text', 'html', 'lcov'],
|
|
reportsDirectory: './coverage',
|
|
},
|
|
}
|
|
|
|
```
|
|
|
|
### Test Utilities
|
|
|
|
Common test utilities are available in `vitestSetup.ts`:
|
|
|
|
- Mock implementations for commonly used functions
|
|
- Test lifecycle hooks (beforeEach, afterEach)
|
|
- Validation test helpers
|
|
|
|
## Best Practices
|
|
|
|
1. **Test Independence**
|
|
|
|
```typescript
|
|
beforeEach(() => {
|
|
vi.resetModules();
|
|
vi.resetAllMocks();
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.clearAllMocks();
|
|
});
|
|
```
|
|
|
|
2. **Mocking**
|
|
|
|
- Use Vitest's built-in mocking utilities
|
|
- Mock external dependencies and services
|
|
- Example:
|
|
|
|
```typescript
|
|
vi.mock("@formbricks/database", () => ({
|
|
prisma: {
|
|
user: {
|
|
create: vi.fn(),
|
|
findUnique: vi.fn(),
|
|
},
|
|
},
|
|
}));
|
|
```
|
|
|
|
3. **Assertions**
|
|
- Write clear, specific assertions
|
|
- Test both success and error cases
|
|
- Example:
|
|
```typescript
|
|
expect(result.ok).toBe(true);
|
|
expect(result.data).toEqual(expectedData);
|
|
expect(async () => await invalidCall()).rejects.toThrow(ValidationError);
|
|
```
|
|
|
|
## Quality Assurance Process
|
|
|
|
1. **Continuous Integration**
|
|
|
|
- Automated test suite execution on pull requests
|
|
- Coverage reports generation
|
|
- Test results reporting
|
|
|
|
2. **New Features**
|
|
- Must include corresponding unit tests
|
|
- Must maintain or improve coverage metrics
|
|
- Must include relevant E2E tests for user-facing features
|