12/14(土)に行われたyokohama.rbに参加してきました。 yokohama.rbは前半は「Rubyレシピブック」読書会、後半は発表したい人が発表する、みたいな会になってて、どちらもセッションも特に参加せずもくもくしててもいいというゆるい会です。
前半、レシピブック
今回やったのは以下の章だったので、yokohama.rbというよりはyokohama.math的な議論がかわされてて数3数Cの経験がない自分にはまったくついていけない世界でした。興味があるなら「数学ガール」読みましょうということでしたw
145
145の平方根で、sqrtメソッドと0.5乗はどっちが速いか、という話になって比較するときに
now = Time.now 1000000.times do sqrt(2.0) end puts "sqrt:#{Time.now - now}" now = Time.now 1000000.times do 2 ** 0.5 end puts "rational:#{Time.now - now}"
みたいなコードを書いてたんですが、時間の測定はBenchmark使ったほうが便利と教わったので今度から使ってみようと思います。
146
モジュールメソッド生やすときに
Module Hoge def self.fuga # do something end end
と書いてたんですが、この章で module_function
というのが書かれてたのでどっちで書くべきなんだろう、と周りの人に聞いてみたところyokohama.rb内ではself使う方が多いみたいでした。
Vim 壁紙
Terminalの背景をVimチートシート壁紙にしてたらスクリーンに写した時にそれなに!?って言われたので、リンク置いときますね。
https://github.com/LevelbossMike/vim_shortcut_wallpaper
実際にはソース書いてるとチートシート埋もれて見えない罠w
後半
@miyohide さんがRubyWorld Conferenceで喋ってきた話をしてもらいました。 ブログにも書かれているこちらですね。
RubyWorld Conference 2013で発表してきた - miyohide's blog
@miyohide さんはIT系イベントでツイート実況スキルが高いのですが、自分の発表の時も必要だろうとBotにツイートさせるアプリを起動させて、自分の発表の時も実況していたという話を聞けました。
やったこと
Capybara+Phantomjs+RSpecで外部サイトにアクセスして、挙動を確認してスクリーンショットを撮るというテストを書いてました。
とりあえずやったこととして、
- Rails new でテスト用アプリ作成
- Gemfileに以下を追加
group :development, :test do gem 'rspec-rails' gem 'capybara' gem 'poltergeist' gem 'pry' gem 'pry-debugger' end
bundle
- 昨日の時点で入ったのは以下のとおり
- rspec-core 2.14.7
- capybara 2.2.0
- poltergeist 1.5.0
- spec_helper.rbに以下を追加
require 'capybara/rails' require 'capybara/poltergeist' require 'poltergeist_init.rb'
- poltergeist_init.rbの中身
Capybara.register_driver :poltergeist do |app| Capybara::Poltergeist::Driver.new(app) end Capybara.default_driver = :poltergeist
- spec/features/sample.rbを追加
sample.rbにアクセスしたいサイトと検証したいことを書く
describe "検索機能" do it "'うどん'というキーワードで検索できること" do visit "http://www.google.com" fill_in "q", with: "うどん" click_button "検索" page.save_screenshot('うどん検索結果.png', :full => true) end end
上記のコードを動かすと、Googleにアクセスして'うどん'というキーワードで検索したあと、うどんという結果が出ている画面をスクリーンショットに出してくれます。
会社で今、cucumberを用いたテストを行っているのですが、テスト大杉&cucumberが遅い&落ちたときの原因調査が大変という悩みを抱えているので、このように期待結果をブラックボックス的にテストするコードを増やしていって、既存のテストをどんどん消したりmodel単体テストに移していく改造を行おうと思っています。
上記のテストはshouldがないので、スクリーンショットを撮るとともにこの結果として検証したい内容を書かないとテストの失敗を検知してくれないので書く必要ありますが、とりあえずやろうと思っていることはできそうで良かったです。
それと、今回のコードはcapybara/railsなどを使っていますが、ブラックボックステストしたいだけなら完全にrspecだけになるので別にRailsプロジェクトにする必要もないかなと思ってて、その辺を引き続き調べてみようと思います。
次回
次回は1/11(土)になります。
Yokohama.rb Monthly Meetup #40 - Yokohama.rb | Doorkeeper
追記
self
とmodule_function
の挙動の違いについてコメントもらいました。
module_function については http://t.co/hSGEeV5053 がわかりやすいですね / “yokohamarb#39に参加してきました #yokohamarb - 月曜日までに考えておきます” http://t.co/1C9Hqcz4t2
— そのっつ (SEO Naotoshi) (@sonots) 2013, 12月 15
@ryonext Yokohama.rbに参加出来なかったので、ブログ内容から話に入りますが、module_functionとdef self.hogeは一緒じゃないので注意した方が良いですね。前者は同時にプライベートなインスタンスメソッドも定義されます。
— ドーモ、じょーかじゃです (@joker1007) 2013, 12月 15
挙動の違いがわかってスッキリしました。ありがとうございます!