2017-04-07 83 views
0

我試圖使用node-geocoder npm包來獲取位置的緯度和經度的一些對象。返回JavaScript承諾拒絕履行價值

請幫我理解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 

大二這是一個測試(玩笑框架):

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

您無法返回尚未到達的結果。等待你必須履行的承諾。 – Bergi

回答

1

爲了進行測試,大部分測試套件提供所有的承諾爲基礎的測試異步回調。我希望它(雙關語意)這樣的工作:

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())可以改變。但是,模式應該或多或少相同。

+0

但我不想更新測試。如果我在測試中更改數組中的值 - 測試也將成功通過 –

+0

您使用的測試框架是什麼? – Bwaxxlo