調べてもgoogle places apiのRspecに関する情報が全くないので質問させていただきます。
かなり初歩的なことですが、このような外部apiをテストしたいときはどのようにすればよろしいでしょうか
例えば、
html
1<div class="col-lg-4 search-window p-3"> 2 <p class="p-3 mb-2 search-title text-center">search</p> 3 <table hidden> 4 <tr><td width="100px">緯度</td><td id="id_ido"></td></tr> 5 <tr><td>経度</td><td id="id_keido"></td></tr> 6 <tr><td>ズームレベル</td><td id="id_level"></td></tr> 7 <tr><td>住所</td><td id="id_address"></td></tr> 8 </table> 9 <%= form_with local: true, method: :get do |form| %> 10 <p class="m-0 mt-3"><%= form.label :name, "フリーワード" %></p> 11 <p class="m-0"><%= form.text_field :name , class: 'form-control',value: params[:name]%></p> 12 <p class="m-0 mt-3"><%= form.label :category, "分類" %></p> 13 <p class="m-0"><%= form.select :category, [["全カテゴリ","nil"],["cafe", "cafe"], ["park", "park"], ["居酒屋", "bar"], ["ギャラリー", "art_gallery"], ["美術館・博物館", "museum"],["飲食店","restaurant"]], {}, class: 'form-control',selected: params[:category]%></p> 14 <p class="m-0 mt-3"><%= form.label :radius, "距離(半径)" %></p> 15 <p class="m-0"><%= form.select :radius, [["100m", "100"], ["300m", "300"], ["500m", "500"], ["1km", "1000"], ["3km", "3000"]], {}, class: 'form-control',selected: params[:radius]%></p> 16 <p class="m-0 mt-3"><%= form.label :lat, "緯度" %></p> 17 <p class="m-0"><%= form.text_field :search2 , class: 'form-control', id: "lat" ,value: params[:search2]%></p> 18 <p class="m-0 mt-3"><%= form.label :lng, "経度"%></p> 19 <p class="m-0"><%= form.text_field :search3, class: 'form-control', id: "lng" ,value: params[:search3]%></p> 20 <p class="m-0"><%= form.submit "検 索",class:"btn btn-success search-btn col-lg-12 mt-3 p-2"%></p> 21 <% end %> 22 </div>
このようなhtmlがあり各項目を入力して検索ボタンを押すと、その付近の店舗等がgoogle places apiによって何店舗か探してくれるというものを作りました。それをsystem specによって入力⇨検索⇨検索結果の表示をテストしたいのですが、うまくいきません
system_spec
1require 'rails_helper' 2 3RSpec.feature "Homes", type: :system do 4 5 scenario '検索ができること', js: true do 6 visit places_home_path 7 page.driver.browser.switch_to.alert.accept 8 fill_in 'name', with: 'ラーメン' 9 select '100', from: 'radius' 10 fill_in 'search2', with: '123456' 11 fill_in 'search3', with: '123456' 12 # ボタンをクリックする 13 click_on '検 索' 14 # 成功したことを検証する 15 expect(response.body).to include ("検索結果") 16 end 17 18end
現在このようなテストを書いていますが、結果は
error
11) Homes 検索ができること 2 Failure/Error: @client2 = @client.spots( keyword_lat.to_f, keyword_lng.to_f,:language => 'ja',:name => keyword_name, :radius => keyword_rad,:types => keyword_cate, multipage: true,detail: true).sample(3) 3 4 GooglePlaces::InvalidRequestError: 5 { 6 "html_attributions" : [], 7 "results" : [], 8 "status" : "INVALID_REQUEST" 9 } 10 # /usr/local/bundle/gems/google_places-2.0.0/lib/google_places/request.rb:370:in `parsed_response' 11 ・・・ 12 # /usr/local/bundle/gems/puma-3.12.6/lib/puma/thread_pool.rb:135:in `block in spawn_thread' 13 # ------------------ 14 # --- Caused by: --- 15 # Capybara::CapybaraError: 16 # Your application server raised an error - It has been raised in your test code because Capybara.raise_server_errors == true 17 # /usr/local/bundle/gems/capybara-3.35.3/lib/capybara/session.rb:160:in `raise_server_error!' 18
このような結果になります。
一応controllerは
controller
1 def home 2 3 keyword = params[:search] 4 keyword_lat = params[:search2] 5 keyword_lng = params[:search3] 6 keyword_cate = params[:category] 7 keyword_rad = params[:radius] 8 keyword_name = params[:name] 9 10 if user_signed_in? 11 @user = current_user.id 12 else 13 end 14 15 @client = GooglePlaces::Client.new( ENV['GOOGLE_API_KEY']) 16 @client2 = @client.spots( keyword_lat.to_f, keyword_lng.to_f,:language => 'ja',:name => keyword_name, :radius => keyword_rad,:types => keyword_cate, multipage: true,detail: true).sample(3) 17 @place = Place.new 18 end
このような形で、入力した値をplaces.spot に渡しています。
どのようにしてテストを書けばわからない状態です。少しでも力を貸していただければ幸いです。
よろしくお願いします

あなたの回答
tips
プレビュー