質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Capybara

Capybaraは、 Rubyで開発されているWebアプリケーションテストフレームワークです。Webブラウザ不要でブラウザ上のユーザー操作及びJavaScriptの挙動を自動化することができます。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

Q&A

0回答

1515閲覧

railsとgooglemapsAPIで実装した現在地を表示するMAPがsystem_specで表示されずテストできない

shumpei.o

総合スコア0

Capybara

Capybaraは、 Rubyで開発されているWebアプリケーションテストフレームワークです。Webブラウザ不要でブラウザ上のユーザー操作及びJavaScriptの挙動を自動化することができます。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

0グッド

0クリップ

投稿2021/08/28 21:37

前提・実現したいこと

こんにちはRails初学者のshumpeiです!
railsアプリでgooglemapsAPIを用いて現在地および登録した周辺施設が表示されるMAPを表示する機能を実装したのですが、rspecのsystem_specでテストを記述しようとしたら下記のようなエラーでMAPが表示されませんでした。

chromedriver周りでエラーが出ているようで、位置情報取得の許可が必要なのかと考えたのですが、方法がわからずどうやったらMAPが表示されてテストが実施できるかご教示のほどお願いいたします

※ブラウザ上ではMAPは表示されており、現在地と周辺施設にピンが立っております

発生している問題・エラーメッセージ

Spots 表示とリンクのテスト 地図が表示され施設のマーカーが立っていること (FAILED - 1) Failures: 1) Spots 表示とリンクのテスト 地図が表示され施設のマーカーが立っていること Failure/Error: expect(page).to have_css '.gm-style' Selenium::WebDriver::Error::UnexpectedAlertOpenError: unexpected alert open: {Alert text : 位置情報取得に失敗しました!位置情報へのアクセスが許可されているか確認してください} (Session info: headless chrome=92.0.4515.159) [Screenshot Image]: /Users/os/dev_app/bg/tmp/screenshots/failures_r_spec_example_groups_spots_nested_地図が表示され施設のマーカーが立っていること_660.png # 0 chromedriver 0x000000010ea71829 chromedriver + 2730025 # 1 chromedriver 0x000000010f12ef43 chromedriver + 9797443 # 2 chromedriver 0x000000010e803958 chromedriver + 182616 # 3 chromedriver 0x000000010e867260 chromedriver + 590432 # 4 chromedriver 0x000000010e855193 chromedriver + 516499 # 5 chromedriver 0x000000010e82b8be chromedriver + 346302 # 6 chromedriver 0x000000010e82cb25 chromedriver + 351013 # 7 chromedriver 0x000000010ea38f8f chromedriver + 2498447 # 8 chromedriver 0x000000010ea4ba61 chromedriver + 2574945 # 9 chromedriver 0x000000010ea1e76b chromedriver + 2389867 # 10 chromedriver 0x000000010ea4ceda chromedriver + 2580186 # 11 chromedriver 0x000000010ea2effc chromedriver + 2457596 # 12 chromedriver 0x000000010ea66148 chromedriver + 2683208 # 13 chromedriver 0x000000010ea662d1 chromedriver + 2683601 # 14 chromedriver 0x000000010ea76848 chromedriver + 2750536 # 15 libsystem_pthread.dylib 0x00007fff205a58fc _pthread_start + 224 # 16 libsystem_pthread.dylib 0x00007fff205a1443 thread_start + 15 # ./spec/system/spots_spec.rb:12:in `block (3 levels) in <main>' # -e:1:in `<main>' Finished in 3.34 seconds (files took 0.16882 seconds to load) 1 example, 1 failure Failed examples: rspec ./spec/system/spots_spec.rb:11 # Spots 表示とリンクのテスト 地図が表示され施設のマーカーが立っていること

該当のソースコード

system/spots_spec.rb

rspec

1require 'rails_helper' 2 3RSpec.describe 'Spots', type: :system do 4 describe '表示とリンクのテスト', js: true do 5 let!(:store1) { create(:store) } 6 7 before do 8 visit spots_path 9 end 10 11 it '地図が表示され施設のマーカーが立っていること' do 12 expect(page).to have_css '.gm-style' 13 expect(page).to have_css '#gmimap0' 14 end 15 end 16end 17

capybara.rb

rspec

1RSpec.configure do |config| 2 config.before(:each, type: :system) do 3 driven_by :rack_test 4 end 5 6 config.before(:each, type: :system, js: true) do 7 driven_by :selenium, using: :headless_chrome, screen_size: [1400, 1400] 8 end 9end 10

spots/index.html.rb

ruby

1<div class="container"> 2 <div class="row"> 3 <div class="col-12 my-5 d-flex justify-content-center"> 4 <h2><i class="fas fa-map-marked-alt"></i>現在地から探す</h2> 5 </div> 6 <div id="map" class="mt-5 mx-auto"></div> 7 </div> 8</div> 9 10<script> 11 let map, geocoder, icon, storeMarker = [], infoWindow = []; 12 const stores = gon.stores; 13 let currentInfoWindow = null; 14 15 function initMap(){ 16 geocoder = new google.maps.Geocoder() 17 if(!navigator.geolocation) { 18 alert('Geolocation APIに対応していません'); 19 return false; 20 } 21 // 現在地が取得できたら地図の中心にピンを立てて表示、取得に失敗したらアラートを表示 22 navigator.geolocation.getCurrentPosition(function(position) { 23 latLng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); 24 map = new google.maps.Map(document.getElementById('map'), { 25 center: latLng, 26 zoom: 12, 27 }); 28 image = { 29 url: "<%= asset_path('gmap_icon.png') %>", 30 scaledSize: new google.maps.Size(50, 50), 31 } 32 marker = new google.maps.Marker({ 33 position: latLng, 34 map: map, 35 icon: image, 36 animation: google.maps.Animation.DROP, 37 title:"現在地", 38 }); 39 40 for (let i = 0; i < stores.length; i++){ 41 storeMarker[i] = new google.maps.Marker({ 42 map: map, 43 position: { 44 lat: stores[i].latitude, 45 lng: stores[i].longitude, 46 } 47 }); 48 contentString = 49 `<p class="mb-0">施設名:<a href='/stores/${stores[i].id}'>${stores[i].name}</a></p>` + 50 '<hr class="my-0">' + 51 `<p class="mt-3 mb-0">施設紹介:${stores[i].introduction}</p>` + 52 `<p class="mt-1 mb-0">住所  :${stores[i].prefecture_code}${stores[i].city}</p>`; 53 54 infoWindow[i] = new google.maps.InfoWindow({ 55 content: contentString, 56 }); 57 storeMarker[i].addListener("click", () => { 58 if (currentInfoWindow) { 59 currentInfoWindow.close(); 60 } 61 infoWindow[i].open(map,storeMarker[i]); 62 currentInfoWindow = infoWindow[i]; 63 }); 64 } 65 }, function() { 66 alert('位置情報取得に失敗しました!位置情報へのアクセスが許可されているか確認してください'); 67 }); 68 } 69</script> 70 71<script async defer 72 src="https://maps.googleapis.com/maps/api/js?v=3.exp&key=<%= Rails.application.credentials.g_map[:api] %>&callback=initMap"> 73</script> 74

試したこと

headress_chromeを使用してテストしている為、headress_chromeの位置情報取得をONにする設定や、
テストの中で位置情報をONにする方法を探しましたが、見つかりませんでした。

補足情報(FW/ツールのバージョンなど)

rails 6.1.4
ruby 2.7.4
rspec-rails 5.0.1
capybara 3.35.3
webdrivers 4.6.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問