Back to Repositories

Testing Uni-App Extension API Parser Implementation in dcloudio/uni-app

This test suite validates the uni-app extension API functionality, focusing on module injection parsing and auto-imports for different platforms and languages. It ensures proper handling of API mappings and platform-specific implementations.

Test Coverage Overview

The test suite provides comprehensive coverage of the uni-app extension API parsing mechanisms:

  • API injection parsing for different module configurations
  • Platform-specific injection handling (web, iOS, Android)
  • Language-specific implementations (JavaScript, Kotlin, Swift)
  • Auto-import transformation validation

Implementation Analysis

The testing approach employs Jest’s describe/test structure to organize related test cases. It uses expect assertions to verify parsing outcomes for various API configurations and platform scenarios.

The implementation focuses on validating the parseInjects and injectsToAutoImports functions with different input combinations and edge cases.

Technical Details

  • Testing Framework: Jest
  • Language: TypeScript
  • Key Functions Tested: parseInjects, injectsToAutoImports
  • Test Scope: Module injection parsing, platform-specific handling

Best Practices Demonstrated

The test suite demonstrates several testing best practices:

  • Systematic test organization using describe blocks
  • Comprehensive edge case coverage
  • Clear test case isolation and naming
  • Platform-specific testing considerations
  • Explicit expected vs actual value comparisons

dcloudio/uni-app

packages/uni-cli-shared/__tests__/uniExtApi.spec.ts

            
import { parseInjects } from '../src/uni_modules'
import { injectsToAutoImports } from '../src/vite'

describe('uni_modules:uni-ext-api', () => {
  test('parseInjects', () => {
    expect(
      parseInjects(
        true,
        'app-android',
        'kotlin',
        `@/uni_modules/uni-getbatteryinfo`,
        '',
        {
          uni: 'getBatteryInfo',
        }
      )
    ).toEqual({
      'uni.getBatteryInfo': '@/uni_modules/uni-getbatteryinfo',
    })
    expect(
      parseInjects(
        true,
        'app-android',
        'kotlin',
        `@/uni_modules/uni-getbatteryinfo`,
        '',
        {
          uni: ['getBatteryInfo'],
        }
      )
    ).toEqual({
      'uni.getBatteryInfo': [
        '@/uni_modules/uni-getbatteryinfo',
        'getBatteryInfo',
      ],
    })
    expect(
      parseInjects(
        true,
        'app-android',
        'kotlin',
        `@/uni_modules/uni-location`,
        '',
        {
          uni: ['openLocation', 'chooseLocation'],
        }
      )
    ).toEqual({
      'uni.openLocation': ['@/uni_modules/uni-location', 'openLocation'],
      'uni.chooseLocation': ['@/uni_modules/uni-location', 'chooseLocation'],
    })
    expect(
      parseInjects(
        true,
        'app-android',
        'kotlin',
        `@/uni_modules/uni-capturescreen`,
        '',
        {
          uni: {
            onUserCaptureScreen: 'onCaptureScreen',
            offUserCaptureScreen: 'offUserCaptureScreen',
          },
        }
      )
    ).toEqual({
      'uni.onUserCaptureScreen': [
        '@/uni_modules/uni-capturescreen',
        'onCaptureScreen',
      ],
      'uni.offUserCaptureScreen': [
        '@/uni_modules/uni-capturescreen',
        'offUserCaptureScreen',
      ],
    })
  })
  test('parseInjects with platform', () => {
    expect(
      parseInjects(
        true,
        'web',
        'javascript',
        `@/uni_modules/uni-getbatteryinfo`,
        '',
        {
          uni: {
            getBatteryInfo: {
              name: 'getBatteryInfo1',
            },
          },
        }
      )
    ).toEqual({
      'uni.getBatteryInfo': [
        '@/uni_modules/uni-getbatteryinfo',
        'getBatteryInfo1',
      ],
    })
    expect(
      parseInjects(
        true,
        'web',
        'javascript',
        `@/uni_modules/uni-getbatteryinfo`,
        '',
        {
          uni: {
            getBatteryInfo: {
              web: false,
            },
          },
        }
      )
    ).toEqual({})
    expect(
      parseInjects(
        true,
        'web',
        'javascript',
        `@/uni_modules/uni-location`,
        '',
        {
          uni: ['openLocation'],
        }
      )
    ).toEqual({
      'uni.openLocation': ['@/uni_modules/uni-location', 'openLocation'],
    })

    expect(
      parseInjects(true, 'app-ios', 'swift', `@/uni_modules/uni-request`, '', {
        uni: {
          request: {
            app: {
              js: false,
            },
          },
        },
      })
    ).toEqual({
      'uni.request': ['@/uni_modules/uni-request', 'request', { js: false }],
    })
    expect(
      parseInjects(
        true,
        'app-android',
        'kotlin',
        `@/uni_modules/uni-request`,
        '',
        {
          uni: {
            request: {
              app: false,
            },
          },
        }
      )
    ).toEqual({})
    expect(
      parseInjects(
        true,
        'app-android',
        'javascript',
        `@/uni_modules/uni-request`,
        '',
        {
          uni: {
            request: {
              app: {
                js: false,
                kotlin: false,
                swift: true,
              },
            },
          },
        }
      )
    ).toEqual({})
    expect(
      parseInjects(
        true,
        'app-android',
        'kotlin',
        `@/uni_modules/uni-request`,
        '',
        {
          uni: {
            request: {
              app: {
                js: false,
                kotlin: false,
                swift: true,
              },
            },
          },
        }
      )
    ).toEqual({})
    expect(
      parseInjects(true, 'app-ios', 'swift', `@/uni_modules/uni-request`, '', {
        uni: {
          request: {
            app: {
              js: false,
              kotlin: false,
              swift: true,
            },
          },
        },
      })
    ).toEqual({
      'uni.request': [
        '@/uni_modules/uni-request',
        'request',
        { js: false, kotlin: false, swift: true },
      ],
    })
  })
  test(`injectsToAutoImports`, () => {
    expect(
      injectsToAutoImports(
        parseInjects(
          true,
          'app-android',
          'kotlin',
          `@/uni_modules/uni-getbatteryinfo`,
          '',
          {
            uni: ['getBatteryInfo', 'getBatteryInfoSync'],
          }
        )
      )
    ).toEqual([
      {
        from: '@/uni_modules/uni-getbatteryinfo',
        imports: [
          ['getBatteryInfo', 'uni_getBatteryInfo'],
          ['getBatteryInfoSync', 'uni_getBatteryInfoSync'],
        ],
      },
    ])
  })
})