@pearl-framework/testing
v0.1.0
Published
Pearl.js testing — HTTP test client, database helpers, mail fakes, and test utilities
Readme
@pearl-framework/testing
HTTP test client, mail fakes, data factories, and test helpers for Pearl.js
Installation
pnpm add -D @pearl-framework/testing vitestUsage
HTTP testing
import { HttpTestClient } from '@pearl-framework/testing'
const client = new HttpTestClient(app.handler)
it('creates a user', async () => {
const res = await client.post('/users', {
name: 'Sharvari',
email: '[email protected]',
})
res.assertCreated()
.assertJson({ name: 'Sharvari' })
.assertJsonPath('email', '[email protected]')
})
it('requires auth', async () => {
const res = await client.get('/me')
res.assertUnauthorized()
})
it('works with token', async () => {
const res = await client.withToken(token).get('/me')
res.assertOk()
})Validation errors
it('validates required fields', async () => {
const res = await client.post('/users', {})
res.assertValidationErrors(['name', 'email'])
})Mail fake
import { MailFake } from '@pearl-framework/testing'
const mailFake = new MailFake()
// inject into container...
await registerUser(userData)
mailFake.assertSentTo('[email protected]')
mailFake.assertCount(1)
mailFake.assertSent('Welcome to Pearl!')Data factories
import { Factory } from '@pearl-framework/testing'
const userFactory = new Factory(() => ({
name: 'Test User',
email: `user-${Date.now()}@test.com`,
role: 'user' as const,
}))
const user = userFactory.make()
const admin = userFactory.make({ role: 'admin' })
const users = userFactory.makeMany(5)
const admins = userFactory.state({ role: 'admin' }).makeMany(3)Database helper
import { DatabaseTestHelper } from '@pearl-framework/testing'
const dbHelper = new DatabaseTestHelper(db)
beforeEach(() => dbHelper.begin())
afterEach(() => dbHelper.rollback())