Thanks Driven Life

日々是感謝

ジョージアポイント乞食サービス「gpkure」作った

メインの処理は大したことやってないので、
今更ながらの初体験やテストの部分で少しだけ詰まったのでそれらを書こうとおもいます。

gongo/gpkure · GitHub

初 Heroku

最初は社内の閉じた環境に立ててたんですが、
最近流行りのサービスに乗り遅れまくってたので Heroku で運用することに。

初 Redis

社内に閉じていた時のプロトタイプはこれ

ジョージアシールを入力してもらって、web.rb と同じディレクトリにある serial.txt にどんどん追記していく — Gist

bash だけで全部できないかなーと思って作り始めたんだけど、
なんかリクエストの扱いとかめんどくさそうだったので sinatra をかませ、
だけど記録の所だけは bash の名残りが、みたいなものです。

flock だったり lockfile だったりの使い方わかったのはいいけど、
結局 Heroku に乗せる時にサヨナラしました。bash 奥が深いわー。

そんなわけで Heroku Plugin に Redis To Go Nano を導入しました。
導入の仕方は Redis To Go | Heroku Dev Center 見れば簡単でした。

初 pull request した

されたことはあるけどしたことなかった。

heroku-redis-cli を使うと warning が出たのでそれの
Pull Request #3: Remove deprecated methods by gongo · rapportive-oss/heroku-redis-cli · GitHub

まだされていない

初 「Sinatra のテスト」

Testing Sinatra with Rack::Test 見ればだいたいできるね! rack-test 便利。
テストコードはこちら gpkure/test/test_web.rb

iPhone 専用画面のテスト

ajax を扱いたかったのと、ヘッドレスで生きていきたかったので capybara-webkit を採用しました。
rack-test の時は user-agent の書き換えは簡単だった けど
capybara の場合はどうすんだろうってお悩みしておりました。
ぐぐるといくつか方法みつかるんだけど、なかなか上手くいかず。
いろいろあるんだろうけど、自分の中では最終的にこうなりました

require 'capybara/webkit'

Capybara.default_driver    = :webkit
Capybara.javascript_driver = :webkit

class GpkureAcceptanceTest < Test::Unit::TestCase
  include Capybara::DSL

  def setup
    Capybara.app = Sinatra::Application.new
    page.driver.header('user-agent', USER_AGENT_IPHONE4)
  end

  def test_gift_success
    visit '/'
    fill_in 'serial', :with => '1234567812345678'
    find('#gift').click
  end
end

コードはこちら
Capybara::Driver::Webkit#header を使って変更する手でいきました。

あと Capybara::RackTest::Driver や Capybara::Mechanize::Driver (capybara-mechanize) を使う場合は

Capybara.register_driver :iphone do |app|
  Capybara::RackTest::Driver.new(app, :headers => {'HTTP_USER_AGENT' => 'iPhone'})
  # Capybara::Mechanize::Driver.new(app, :headers => {'HTTP_USER_AGENT' => 'iPhone'})
end

Capybara.default_driver = :iphone

とかでいけるかもしれませんねぇ。きっとたぶん。

Travis CI で Headless Browser Test

しっかりと対応してた。便利 Travis CI: GUI & Headless browser testing on travis-ci.org
そんなわけで こんな .travis.yml で全てうまくいきました。

まとめ

ジョージアポイントください