月曜日までに考えておきます

ITネタとゲームネタ中心に興味のあること色々書きます。

yokohamarb#39に参加してきました #yokohamarb

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にツイートさせるアプリを起動させて、自分の発表の時も実況していたという話を聞けました。

miyohide/auto_tweet

やったこと

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
  • rails g rspec:install

  • 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

追記

selfmodule_functionの挙動の違いについてコメントもらいました。

挙動の違いがわかってスッキリしました。ありがとうございます!