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).' )