Ruby on Rails開発のインターン (Day 17)
こんにちは、皆さん!
今日はついに実際に使っているマップにテストを書いていこうと思う。ここまではずっとcapybaraテストを勉強する用のアプリに書いてきた。さあ、ここから習ったものを使って実際に使用するものに反映していこう。
- トピック:
- 疑問:
- 問題:
- 学習した内容:
- capybaraテストからCSSの値を引き出す方法
- Rubyでsubstringする方法
- capybaraテストでJavaScriptを実行する方法
- マップ上のすべてのマーカーを返してくれる関数はないので、マーカーを足すときに配列などどこかにそのコピーを持っておいてそこからマーカーにアクセスできる
- 今後やってみたいこと:
- リソース:
capybaraテストでCSSの値にアクセスする方法
最初に、div#map
(IDが"map"のdivタグ)にあるマップにアクセスしたかった。
それで、下記のようにアクセスした。
find('#map')
そして、次はそこからスタイルを取り出す方法。これに関しては全くリソースが見当たらなかった。
find('#map').style('width')
結構適当にあてずっぽうで行ったところもあるが、これでスタイルにアクセスすることができた。
style.width
のようにドットとスタイル名でアクセスするJavaScriptとは違って、スタイル名を()の中に入れる。
それを変数に入れて、後で使う。
map_width = find('#map').style('width')
とここで、うまくいかなかったので、とりあえず、この変数の内容をアウトプットしてみた。驚くことにHashだったのだ。
{"width"=>"400px"}
ということで、改めて、実際の値を取り出す方法をHashのやり方に変えた。map_width['width']
みたいに。
ここまででも、なかなか複雑だが、さらに、面倒くさいことに得られた値には"px"がついているので、数字として運用するにはさらにこれを取り除く必要がある。
# 横幅のHashにアクセス map_width_hash = find("#map").style("width") # 横幅の値の文字列版を入手 map_width_string = map_width_hash['width'] # 数字の値にするためにpxをカットして、そのあとにそれをintegerに変換する map_width = map_width_string[0..(map_width_string.length-2)].to_i
ちなみに、ここでRubyにおいてどうやってsubstringをやるのか学んだ(笑)
capybaraテストでJavaScriptを実行する方法
やり方は簡単。下記のような関数をcapybaraテストの中に入れればよい。
page.execute_script("example('Hello')")
この例だと、"example"という名前の関数を'Hello'という引数を入れたものを実行する。
***ひとつ大事なことは実行したいJavaScriptのコードがcapybaraテストで訪れるサイト内でアクセスできるようにしなければならないということ!! 僕の場合は直接map.html.erb
に入れた。(パイプラインを使っている人は大丈夫だと思う)***
まとめ
結局、職場のプログラムでcapybaraテストによるマップのテストはまだうまくいかなかったが、最終的なアイデアをしっかりコード化できた。
本当のマップは少しばかり複雑なので、もう少しコードを書くのに時間がかかりそう。うまくここまでやってきたコードが直結するといいな。
ご精読ありがとうございました。では、また次回まで✌