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

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

新規登録して質問してみよう
ただいま回答率
87.20%
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)フレームワークです。

受付中

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

135閲覧

投稿2022/06/20 13:57

編集2022/06/26 04:44

調べてもgoogle places apiのRspecに関する情報が全くないので質問させていただきます。
かなり初歩的なことですが、このような外部apiをテストしたいときはどのようにすればよろしいでしょうか
例えば、

html

<div class="col-lg-4 search-window p-3"> <p class="p-3 mb-2 search-title text-center">search</p> <table hidden> <tr><td width="100px">緯度</td><td id="id_ido"></td></tr> <tr><td>経度</td><td id="id_keido"></td></tr> <tr><td>ズームレベル</td><td id="id_level"></td></tr> <tr><td>住所</td><td id="id_address"></td></tr> </table> <%= form_with local: true, method: :get do |form| %> <p class="m-0 mt-3"><%= form.label :name, "フリーワード" %></p> <p class="m-0"><%= form.text_field :name , class: 'form-control',value: params[:name]%></p> <p class="m-0 mt-3"><%= form.label :category, "分類" %></p> <p class="m-0"><%= form.select :category, [["全カテゴリ","nil"],["cafe", "cafe"], ["park", "park"], ["居酒屋", "bar"], ["ギャラリー", "art_gallery"], ["美術館・博物館", "museum"],["飲食店","restaurant"]], {}, class: 'form-control',selected: params[:category]%></p> <p class="m-0 mt-3"><%= form.label :radius, "距離(半径)" %></p> <p class="m-0"><%= form.select :radius, [["100m", "100"], ["300m", "300"], ["500m", "500"], ["1km", "1000"], ["3km", "3000"]], {}, class: 'form-control',selected: params[:radius]%></p> <p class="m-0 mt-3"><%= form.label :lat, "緯度" %></p> <p class="m-0"><%= form.text_field :search2 , class: 'form-control', id: "lat" ,value: params[:search2]%></p> <p class="m-0 mt-3"><%= form.label :lng, "経度"%></p> <p class="m-0"><%= form.text_field :search3, class: 'form-control', id: "lng" ,value: params[:search3]%></p> <p class="m-0"><%= form.submit "検 索",class:"btn btn-success search-btn col-lg-12 mt-3 p-2"%></p> <% end %> </div>

このようなhtmlがあり各項目を入力して検索ボタンを押すと、その付近の店舗等がgoogle places apiによって何店舗か探してくれるというものを作りました。それをsystem specによって入力⇨検索⇨検索結果の表示をテストしたいのですが、うまくいきません

system_spec

require 'rails_helper' RSpec.feature "Homes", type: :system do scenario '検索ができること', js: true do visit places_home_path page.driver.browser.switch_to.alert.accept fill_in 'name', with: 'ラーメン' select '100', from: 'radius' fill_in 'search2', with: '123456' fill_in 'search3', with: '123456' # ボタンをクリックする click_on '検 索' # 成功したことを検証する expect(response.body).to include ("検索結果") end end

現在このようなテストを書いていますが、結果は

error

1) Homes 検索ができること 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) GooglePlaces::InvalidRequestError: { "html_attributions" : [], "results" : [], "status" : "INVALID_REQUEST" } # /usr/local/bundle/gems/google_places-2.0.0/lib/google_places/request.rb:370:in `parsed_response'   ・・・ # /usr/local/bundle/gems/puma-3.12.6/lib/puma/thread_pool.rb:135:in `block in spawn_thread' # ------------------ # --- Caused by: --- # Capybara::CapybaraError: # Your application server raised an error - It has been raised in your test code because Capybara.raise_server_errors == true # /usr/local/bundle/gems/capybara-3.35.3/lib/capybara/session.rb:160:in `raise_server_error!'

このような結果になります。
一応controllerは

controller

def home keyword = params[:search] keyword_lat = params[:search2] keyword_lng = params[:search3] keyword_cate = params[:category] keyword_rad = params[:radius] keyword_name = params[:name] if user_signed_in? @user = current_user.id else end @client = GooglePlaces::Client.new( ENV['GOOGLE_API_KEY']) @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) @place = Place.new end

このような形で、入力した値をplaces.spot に渡しています。

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

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

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)フレームワークです。