Testing Language Acceptance Handling in Koa Framework
This test suite validates the language acceptance functionality in Koa’s request handling system. It focuses on testing the ctx.acceptsLanguages() method which determines client language preferences based on Accept-Language headers and handles language negotiation.
Test Coverage Overview
Implementation Analysis
Technical Details
Best Practices Demonstrated
koajs/koa
__tests__/request/acceptsLanguages.test.js
'use strict'
const { describe, it } = require('node:test')
const assert = require('assert')
const context = require('../../test-helpers/context')
describe('ctx.acceptsLanguages(langs)', () => {
describe('with no arguments', () => {
describe('when Accept-Language is populated', () => {
it('should return accepted types', () => {
const ctx = context()
ctx.req.headers['accept-language'] = 'en;q=0.8, es, pt'
assert.deepStrictEqual(ctx.acceptsLanguages(), ['es', 'pt', 'en'])
})
})
})
describe('with multiple arguments', () => {
describe('when Accept-Language is populated', () => {
describe('if any types types match', () => {
it('should return the best fit', () => {
const ctx = context()
ctx.req.headers['accept-language'] = 'en;q=0.8, es, pt'
assert.strictEqual(ctx.acceptsLanguages('es', 'en'), 'es')
})
})
describe('if no types match', () => {
it('should return false', () => {
const ctx = context()
ctx.req.headers['accept-language'] = 'en;q=0.8, es, pt'
assert.strictEqual(ctx.acceptsLanguages('fr', 'au'), false)
})
})
})
describe('when Accept-Language is not populated', () => {
it('should return the first type', () => {
const ctx = context()
assert.strictEqual(ctx.acceptsLanguages('es', 'en'), 'es')
})
})
})
describe('with an array', () => {
it('should return the best fit', () => {
const ctx = context()
ctx.req.headers['accept-language'] = 'en;q=0.8, es, pt'
assert.strictEqual(ctx.acceptsLanguages(['es', 'en']), 'es')
})
})
})