Testing Content-Type Response Handling in koajs/koa
This test suite validates the Content-Type handling functionality in Koa’s response module, covering both setting and retrieving content types with various MIME types and charset configurations. The tests ensure proper handling of content type extensions, charset defaults, and edge cases.
Test Coverage Overview
Implementation Analysis
Technical Details
Best Practices Demonstrated
koajs/koa
__tests__/response/type.test.js
'use strict'
const { describe, it } = require('node:test')
const context = require('../../test-helpers/context')
const assert = require('assert')
describe('ctx.type=', () => {
describe('with a mime', () => {
it('should set the Content-Type', () => {
const ctx = context()
ctx.type = 'text/plain'
assert.strictEqual(ctx.type, 'text/plain')
assert.strictEqual(ctx.response.header['content-type'], 'text/plain; charset=utf-8')
})
})
describe('with an extension', () => {
it('should lookup the mime', () => {
const ctx = context()
ctx.type = 'json'
assert.strictEqual(ctx.type, 'application/json')
assert.strictEqual(ctx.response.header['content-type'], 'application/json; charset=utf-8')
})
})
describe('without a charset', () => {
it('should default the charset', () => {
const ctx = context()
ctx.type = 'text/html'
assert.strictEqual(ctx.type, 'text/html')
assert.strictEqual(ctx.response.header['content-type'], 'text/html; charset=utf-8')
})
})
describe('with a charset', () => {
it('should not default the charset', () => {
const ctx = context()
ctx.type = 'text/html; charset=foo'
assert.strictEqual(ctx.type, 'text/html')
assert.strictEqual(ctx.response.header['content-type'], 'text/html; charset=foo')
})
})
describe('with an unknown extension', () => {
it('should not set a content-type', () => {
const ctx = context()
ctx.type = 'asdf'
assert(!ctx.type)
assert(!ctx.response.header['content-type'])
})
})
})
describe('ctx.type', () => {
describe('with no Content-Type', () => {
it('should return ""', () => {
const ctx = context()
assert(!ctx.type)
})
})
describe('with a Content-Type', () => {
it('should return the mime', () => {
const ctx = context()
ctx.type = 'json'
assert.strictEqual(ctx.type, 'application/json')
})
})
})