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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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

0回答

591閲覧

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

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クリップ

投稿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 に渡しています。

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

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問