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

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

新規登録して質問してみよう
ただいま回答率
86.02%
Ruby on Rails 5

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

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

RSpec

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

Q&A

受付中

google places api(外部API)のRspecの書き方がわかりません。

ryota5656
ryota5656

総合スコア8

Ruby on Rails 5

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

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

RSpec

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

0回答

0グッド

0クリップ

374閲覧

投稿2022/06/20 13:57

編集2022/06/26 04:44

調べても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 に渡しています。

どのようにしてテストを書けばわからない状態です。少しでも力を貸していただければ幸いです。
よろしくお願いします

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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

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

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

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails 5

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

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

RSpec

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