Back to Repositories

Testing Chinese Traditional Locale Implementation in dayjs

This test suite validates the Chinese Traditional (zh-tw) locale implementation in Day.js, focusing on ordinal formatting and meridiem handling. It ensures proper localization of week numbers and time-of-day indicators.

Test Coverage Overview

The test suite provides comprehensive coverage of zh-tw locale-specific functionality in Day.js.

Key areas tested include:
  • Ordinal formatting for week numbers with correct Traditional Chinese characters
  • 24-hour meridiem (AM/PM) formatting comparison between zh and zh-tw locales
  • Edge cases across full 24-hour cycle

Implementation Analysis

The testing approach employs Jest’s test framework with isolated test cases for each localization feature. The implementation uses Day.js plugins (advancedFormat, weekOfYear) and compares zh-tw against base zh locale behavior.

Testing patterns include:
  • Direct string comparison for formatted output
  • Iterative testing across time ranges
  • Plugin extension verification

Technical Details

Testing infrastructure includes:
  • Jest as the primary testing framework
  • Day.js core library and locale modules
  • Advanced Format plugin for extended formatting options
  • Week of Year plugin for week number calculations
  • Dynamic locale switching capabilities

Best Practices Demonstrated

The test suite exemplifies high-quality testing practices through focused test cases and thorough validation.

Notable practices include:
  • Isolated locale testing
  • Comprehensive time range verification
  • Plugin integration testing
  • Clear test case organization
  • Efficient comparison methodology

iamkun/dayjs

test/locale/zh-tw.test.js

            
import dayjs from '../../src'
import advancedFormat from '../../src/plugin/advancedFormat'
import weekOfYear from '../../src/plugin/weekOfYear'
import '../../src/locale/zh'
import '../../src/locale/zh-tw'

dayjs.extend(advancedFormat).extend(weekOfYear)

const zh = dayjs().locale('zh')
const zhTW = dayjs().locale('zh-tw')

test('ordinal', () => {
  expect(zh.format('wo')).toEqual(`${zh.format('w')}周`)
  expect(zhTW.format('wo')).toEqual(`${zhTW.format('w')}週`)
})

test('Meridiem', () => {
  for (let i = 0; i <= 24; i += 1) {
    expect(zh.add(i, 'hour').format('A')).toBe(zhTW.add(i, 'hour').format('A'))
  }
})