test-water-region.mjs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import assert from 'node:assert/strict'
  2. import { readFile } from 'node:fs/promises'
  3. import ts from 'typescript'
  4. let providerResponse
  5. let requestedPoint
  6. globalThis.window = {
  7. setTimeout,
  8. AMap: {
  9. plugin: (_plugins, done) => done(),
  10. Geocoder: class {
  11. getAddress(point, done) {
  12. requestedPoint = point
  13. providerResponse(done)
  14. }
  15. }
  16. }
  17. }
  18. const source = await readFile(new URL('../src/utils/waterAmap.ts', import.meta.url), 'utf8')
  19. const { outputText } = ts.transpileModule(source, {
  20. compilerOptions: { target: ts.ScriptTarget.ES2022, module: ts.ModuleKind.ESNext }
  21. })
  22. const { findMapRegion } = await import(
  23. `data:text/javascript;base64,${Buffer.from(outputText).toString('base64')}`
  24. )
  25. const fixtures = [
  26. [{ province: '广东省', city: '深圳市', district: '南山区' }, '广东省深圳市南山区'],
  27. [{ province: '北京市', city: [], district: '朝阳区' }, '北京市朝阳区'],
  28. [{ province: '上海市', city: '上海市', district: '浦东新区' }, '上海市浦东新区'],
  29. [{ province: '广东省', city: '东莞市', district: '' }, '广东省东莞市']
  30. ]
  31. for (const [component, expected] of fixtures) {
  32. providerResponse = (done) => done('complete', { regeocode: { addressComponent: component } })
  33. assert.equal(await findMapRegion([113.93, 22.53]), expected)
  34. assert.deepEqual(requestedPoint, [113.93, 22.53])
  35. }
  36. providerResponse = (done) => done('complete', { regeocode: { addressComponent: {} } })
  37. await assert.rejects(findMapRegion([0, 0]), /未能识别/)
  38. providerResponse = (done) => done('no_data', { info: 'NO_DATA' })
  39. await assert.rejects(findMapRegion([0, 0]), /未能识别/)
  40. providerResponse = (done) => done('error', { info: 'CUQPS_HAS_EXCEEDED_THE_LIMIT' })
  41. await assert.rejects(findMapRegion([113.93, 22.53]), /CUQPS_HAS_EXCEEDED_THE_LIMIT/)
  42. console.log(
  43. 'PASS: region provider checks (districts, municipalities, missing district, empty result and quota errors).'
  44. )