2013-04-09 1 views
8

PhantomJSでqunitテストケースを実行しようとしています。私のテストの1つは、phantomJSがDOMのnavigator.geolocation関数にアクセスしようとしているときです。同じテストがブラウザでうまくいき、単にphantomJSでコンソールにハングアップするだけです。phantomJSはジオロケーションをサポートしていますか?

doe phantomJS geolocations?なにか提案を?以下で

休憩条件

if(navigator.geolocation) { 
      window.navigator.geolocation.watchPosition(updateLocation, null, { frequency: 3000 }); 
     } 

答えて

10

場合は、単にfeatures.js例をご確認ください。

>phantomjs.exe features.js 
Detected features (using Modernizr 2.0.6): 

Supported: 
    touch 
    generatedcontent 
    fontface 
    flexbox 
    canvas 
    canvastext 
    postmessage 
    websqldatabase 
    hashchange 
    history 
    draganddrop 
    websockets 
    rgba 
    hsla 
    multiplebgs 
    backgroundsize 
    borderimage 
    borderradius 
    boxshadow 
    textshadow 
    opacity 
    cssanimations 
    csscolumns 
    cssgradients 
    cssreflections 
    csstransforms 
    csstransitions 
    localstorage 
    sessionstorage 
    webworkers 
    applicationcache 
    svg 
    inlinesvg 
    smil 
    svgclippaths 

Not supported: 
    csstransforms3d 
    webgl 
    geolocation 
    indexeddb 
    video 
    audio 
+0

ありがとうございました。本当に役に立ちました。ジオロケーションを飛び越えることができました –

4

あなたがテストを実行しているか、初期設定のDOMに必要な機能を注入することによって、他のものを行うための「ジオロケーション・フェイク・サポート」を追加することができます。次の例では、navigator.geolocation.getCurrentPositionをフェイクします。したがって、ブラウザのWebサイトがこのAPIエンドポイントを呼び出すとき、PhantomJSは常に設定された場所を返します。

webpage.onInitialized = function() { 
    webpage.injectJs('geolocation.js') 
}; 

geolocation.js:

window.navigator.geolocation = { 
    getCurrentPosition: function (success, failure) { 
     success({ 
      coords: { 
       // Will always return Germany, Rostock 
       latitude: 54.0834, 
       longitude: 12.1004 

      }, timestamp: Date.now() 
     }); 
    } 
}; 
関連する問題