You have to be logged in to leave a comment.
Sign In
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
---
description: Guidelines for writing Jest tests for core functionality
globs: 'test/**/*.test.ts,test/**/*.spec.ts'
alwaysApply: false
---
# Jest Testing Guidelines
Files: "test/**/\*.test.ts,test/**/\*.spec.ts"
This rule provides guidance for writing and running Jest tests in the promptfoo project, which are different from the Vitest tests in the `src/app` directory.
## Jest Setup
- Always run `nvm use` first to ensure you're using the correct Node.js version
- Run Jest tests with coverage and randomize options:
```
npm test -- --coverage --randomize
```
- For targeted tests, use the specific pattern:
```
npx jest providers/openai --coverage --randomize
```
- Do NOT use watch mode for CI or shared development environments
- Always run tests in a single pass to ensure consistent results
## Testing Best Practices
- Mock as few functions as possible to keep tests realistic
- Never increase the function timeout - fix the test instead
- Organize tests in descriptive `describe` and `it` blocks:
```typescript
describe('OpenAI Provider', () => {
describe('chat completion', () => {
it('should handle normal input correctly', () => {
// test code
});
it('should handle edge cases', () => {
// test code
});
});
});
```
- When writing expectations, prefer assertions on entire objects rather than individual keys:
```typescript
// Preferred:
expect(result).toEqual({ id: 1, name: 'test' });
// Avoid:
expect(result.id).toEqual(1);
expect(result.name).toEqual('test');
```
- Clean up after tests to prevent side effects:
```typescript
afterEach(() => {
jest.resetAllMocks();
});
```
- Run tests with `--randomize` flag to ensure your mocks setup and teardown don't affect other tests
## Mocking
- Use Jest's mocking utilities rather than complex custom mocks:
```typescript
jest.mock('axios');
const axiosMock = axios as jest.Mocked<typeof axios>;
Press p or to see the previous file or,
n or to see the next file
Comments
Integrate AWS S3
Use S3 remote
Select bucket
Access key
Finish
Use AWS S3 as storage!
Browsing data directories saved to S3 is possible with DAGsHub. Let's configure
your repository to easily display your data in the context of any commit!
Specify your S3 bucket
Select Region
af-south-1 - Africa (Cape Town)
ap-northeast-1 - Asia Pacific (Tokyo)
ap-northeast-2 - Asia Pacific (Seoul)
ap-south-1 - Asia Pacific (Mumbai)
ap-southeast-1 - Asia Pacific (Singapore)
ap-southeast-2 - Asia Pacific (Sydney)
ca-central-1 - Canada (Central)
eu-central-1 - EU (Frankfurt)
eu-north-1 - EU (Stockholm)
eu-west-1 - EU (Ireland)
eu-west-2 - EU (London)
eu-west-3 - EU (Paris)
sa-east-1 - South America (São Paulo)
us-east-1 - US East (N. Virginia)
us-east-2 - US East (Ohio)
us-gov-east-1 - US Gov East 1
us-gov-west-1 - US Gov West 1
us-west-1 - US West (N. California)
us-west-2 - US West (Oregon)
Congratulations!
promptfoo is now integrated with AWS S3!
Delete Storage Key
Are you sure you want to delete this access key?
No
Yes
Integrate Google Cloud Storage
Use Google Storage
Select bucket
Upload key
Finish
Use Google Cloud Storage!
Browsing data directories saved to Google Cloud Storage is possible with DAGsHub. Let's configure
your repository to easily display your data in the context of any commit!
Specify your Google Storage bucket
Congratulations!
promptfoo is now integrated with Google Cloud Storage!
Delete Storage Key
Are you sure you want to delete this access key?
No
Yes
Integrate Azure Cloud Storage
Use Azure Storage
Select bucket
Set key
Finish
Use Azure Cloud Storage!
Browsing data directories saved to Azure Cloud Storage is possible with DAGsHub. Let's configure
your repository to easily display your data in the context of any commit!
Specify your Azure Storage bucket
Congratulations!
promptfoo is now integrated with Azure Cloud Storage!
Delete Storage Key
Are you sure you want to delete this access key?
No
Yes
Integrate S3 compatible storage
Use S3 like remote
Select bucket
Access key
Finish
Use any S3 compatible storage!
Browsing data directories saved to S3 compatible storage is possible with DAGsHub. Let's configure
your repository to easily display your data in the context of any commit!
Specify your S3 bucket
Bucket name cannot be the same as the repository name. Please change one of them.
Check this box only if you trust this domain, otherwise your data and credentials might be
stolen by man in the middle or spoofing attacks.
Congratulations!
promptfoo is now integrated with your S3 compatible storage!