我正在尝试使用node-geocoder npm包来获取某些对象的纬度和经度。
请你帮我理解JavaScript的承诺。
以下是一个示例代码:
import nodeGeocoder from 'node-geocoder'
function getLocation (str) {
// Selecting Google as provider
const geocoder = nodeGeocoder({
provider: 'google',
})
return geocoder.geocode(str)
.then(response => {
// I want to return latitude an longitude
return [response[0].latitude, response[0].longitude]
})
.catch(error => {
console.log(`Geocoder Error: ${ error }`)
})
}
export default getLocation
因此。这是一个测试(Jest框架):
import getLocation from './index'
test('Checking', () => {
expect(getLocation('29 champs elysée paris')).toEqual([48.8698679, 2.3072976])
})
当我尝试使用此测试时,我只获得承诺状态{"fulfillmentValue": undefined, "isFulfilled": false, "isRejected": false, "rejectionReason": undefined}
。
但我需要得到承诺解决的结果。我该怎么办?
我不想编辑测试
答案 0 :(得分:1)
对于测试,大多数测试套件为所有基于promise的测试提供异步回调。我希望它(双关语)能像这样工作:
import getLocation from './index'
test('Checking', (done) => {
getLocation('29 champs elysée paris').then(geoData => {
expect(geoData).toEqual([48.8698679, 2.3072976]);
done();
}).catch(error => {
done(error)
});
});
根据您可能使用的测试框架,您调用解析器回调的方式(即:done()
)可能会发生变化。但是,模式应该或多或少相同。