| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- import assert from 'node:assert/strict'
- import { readFile } from 'node:fs/promises'
- import ts from 'typescript'
- let providerResponse
- let requestedPoint
- globalThis.window = {
- setTimeout,
- AMap: {
- plugin: (_plugins, done) => done(),
- Geocoder: class {
- getAddress(point, done) {
- requestedPoint = point
- providerResponse(done)
- }
- }
- }
- }
- const source = await readFile(new URL('../src/utils/waterAmap.ts', import.meta.url), 'utf8')
- const { outputText } = ts.transpileModule(source, {
- compilerOptions: { target: ts.ScriptTarget.ES2022, module: ts.ModuleKind.ESNext }
- })
- const { findMapRegion } = await import(
- `data:text/javascript;base64,${Buffer.from(outputText).toString('base64')}`
- )
- const fixtures = [
- [{ province: '广东省', city: '深圳市', district: '南山区' }, '广东省深圳市南山区'],
- [{ province: '北京市', city: [], district: '朝阳区' }, '北京市朝阳区'],
- [{ province: '上海市', city: '上海市', district: '浦东新区' }, '上海市浦东新区'],
- [{ province: '广东省', city: '东莞市', district: '' }, '广东省东莞市']
- ]
- for (const [component, expected] of fixtures) {
- providerResponse = (done) => done('complete', { regeocode: { addressComponent: component } })
- assert.equal(await findMapRegion([113.93, 22.53]), expected)
- assert.deepEqual(requestedPoint, [113.93, 22.53])
- }
- providerResponse = (done) => done('complete', { regeocode: { addressComponent: {} } })
- await assert.rejects(findMapRegion([0, 0]), /未能识别/)
- providerResponse = (done) => done('no_data', { info: 'NO_DATA' })
- await assert.rejects(findMapRegion([0, 0]), /未能识别/)
- providerResponse = (done) => done('error', { info: 'CUQPS_HAS_EXCEEDED_THE_LIMIT' })
- await assert.rejects(findMapRegion([113.93, 22.53]), /CUQPS_HAS_EXCEEDED_THE_LIMIT/)
- console.log(
- 'PASS: region provider checks (districts, municipalities, missing district, empty result and quota errors).'
- )
|