mirror of
https://github.com/honojs/hono.git
synced 2024-11-25 13:19:30 +01:00
29f67c5b72
* [WIP] feat: Mustache Middleware Dirty code. A Big problem is tests for Workers Site KV does not work well... * feat: mustache middleware * Add readme
94 lines
3.0 KiB
TypeScript
94 lines
3.0 KiB
TypeScript
import { Context } from '../src/context'
|
|
|
|
describe('Context', () => {
|
|
const req = new Request('http://localhost/')
|
|
const c = new Context(req)
|
|
|
|
it('c.text()', async () => {
|
|
const res = c.text('text in c', 201, { 'X-Custom': 'Message' })
|
|
expect(res.status).toBe(201)
|
|
expect(res.headers.get('Content-Type')).toBe('text/plain')
|
|
expect(await res.text()).toBe('text in c')
|
|
expect(res.headers.get('X-Custom')).toBe('Message')
|
|
})
|
|
|
|
it('c.json()', async () => {
|
|
const res = c.json({ message: 'Hello' }, 201, { 'X-Custom': 'Message' })
|
|
expect(res.status).toBe(201)
|
|
expect(res.headers.get('Content-Type')).toMatch('application/json')
|
|
const text = await res.text()
|
|
const object = JSON.parse(text)
|
|
expect(object.message).toBe('Hello')
|
|
expect(res.headers.get('X-Custom')).toBe('Message')
|
|
})
|
|
|
|
it('c.html()', async () => {
|
|
const res = c.html('<h1>Hello! Hono!</h1>', 201, { 'X-Custom': 'Message' })
|
|
expect(res.status).toBe(201)
|
|
expect(res.headers.get('Content-Type')).toMatch('text/html')
|
|
expect(await res.text()).toBe('<h1>Hello! Hono!</h1>')
|
|
expect(res.headers.get('X-Custom')).toBe('Message')
|
|
})
|
|
|
|
it('c.redirect()', async () => {
|
|
let res = c.redirect('/destination')
|
|
expect(res.status).toBe(302)
|
|
expect(res.headers.get('Location')).toMatch(/^https?:\/\/.+\/destination$/)
|
|
res = c.redirect('https://example.com/destination')
|
|
expect(res.status).toBe(302)
|
|
expect(res.headers.get('Location')).toBe('https://example.com/destination')
|
|
})
|
|
|
|
it('c.header()', async () => {
|
|
c.header('X-Foo', 'Bar')
|
|
const res = c.body('Hi')
|
|
const foo = res.headers.get('X-Foo')
|
|
expect(foo).toBe('Bar')
|
|
})
|
|
|
|
it('c.status() and c.statusText()', async () => {
|
|
c.status(201)
|
|
c.statusText('Created!!!!')
|
|
const res = c.body('Hi')
|
|
expect(res.status).toBe(201)
|
|
expect(res.statusText).toBe('Created!!!!')
|
|
})
|
|
|
|
it('Complext pattern', async () => {
|
|
c.status(404)
|
|
c.statusText('Hono is Not Found')
|
|
const res = c.json({ hono: 'great app' })
|
|
expect(res.status).toBe(404)
|
|
expect(res.statusText).toBe('Hono is Not Found')
|
|
expect(res.headers.get('Content-Type')).toMatch(/json/)
|
|
const obj: { [key: string]: string } = await res.json()
|
|
expect(obj['hono']).toBe('great app')
|
|
})
|
|
|
|
it('Content-Length', async () => {
|
|
let res = c.text('abcdefg')
|
|
expect(res.headers.get('Content-Length')).toBe('7')
|
|
res = c.text('炎')
|
|
expect(res.headers.get('Content-Length')).toBe('3')
|
|
})
|
|
|
|
it('Headers', async () => {
|
|
c.header('X-Custom1', 'Message1')
|
|
c.header('X-Custom2', 'Message2')
|
|
c.status(200)
|
|
c.statusText('OK')
|
|
const res = c.newResponse('this is body', {
|
|
status: 201,
|
|
headers: {
|
|
'X-Custom3': 'Message3',
|
|
'X-Custom2': 'Message2-Override',
|
|
},
|
|
})
|
|
expect(res.headers.get('X-Custom1')).toBe('Message1')
|
|
expect(res.headers.get('X-Custom2')).toBe('Message2-Override')
|
|
expect(res.headers.get('X-Custom3')).toBe('Message3')
|
|
expect(res.status).toBe(201)
|
|
expect(await res.text()).toBe('this is body')
|
|
})
|
|
})
|