Day-O のフォーマット
Rspec で uninitialized constant Capybara (NameError) エラー
最近、Ruby on Rail のチュートリアル をやってる。Ruby と Rails 覚えたい。
順調に進んでたけど Rspec でテスト書くところで躓いた。
第3章 ほぼ静的なページの作成 | Rails チュートリアル
この章で Capybara DSL を Rspec に読み込ませる箇所がある。
# spec_helper.rb Config.include Capybara::DSL
これを書いて実行すると
$ bundle exec rspec spec/requests/static_pages_spec.rb /path/to/rails_application/spec/spec_helper.rb:46:in `block in <top (required)>': uninitialized constant Capybara (NameError)
というようなエラーになってテストが走らない。
なんとなく Capybara というモジュール?が正しく認識出来てないからだと推測。
ぐぐってみると、そもそも Capybara が入ってるかと言われる。
# Gemfile group :test do gem 'selenium-webdriver' gem 'capybara' end
Gemfile は問題なさそう。
$ bundle list | ag capybara * capybara (2.4.4)
インストールもちゃんとされてる。
さらにぐぐる。
チュートリアルのバージョンと違うんじゃねと言われる。
どうやらチュートリアルが少し古くてこの書き方ではモジュールが読み込めていないらしい。
モジュールが読み込めるように下記の設定を記述したら動いた。
# spec_helper.rb ENV['RAILS_ENV'] = 'test' require File.expand_path('../../config/environment', __FILE__)
やってることは難しくなさそう。
ENV['RAILS_ENV'] = 'test'
はおそらく環境変数をテスト用にしてるんだろう。
require File.expand_path('../../config/environment', __FILE__)
File.expand_path は初めて見る関数なので調べた。
第一引数に与えた相対パスを絶対パスに変えてくれるようだ。
第二引数にパスを指定した場合、そのパスをカレントディレクトリにして見た相対パスが指定出来る。
第二引数無しだと現在のカレントディレクトリを元に相対パスを指定する。
要するに config/environment.rb を読み込んで環境変数周りの初期化をしてるっぽい。
初期化すれば Capybara のモジュールが読み込めてテストが動くという感じ、かな。
gibo
.gitignore ボイラープレートというやつ。最高なツール。
.DS_Store とか IDE の設定ファイルとかフレームワークのキャッシュとかそういうリポジトリに含めたくないファイルが書かれた .gitignore のテンプレートを提供してくれる!最高なツール!
Usage
Homebrew でサクッと入れる。
$ brew install gibo
たとえば OS X の場合、こういうのが表示される。
$ gibo osx ### https://raw.github.com/github/gitignore/298588469ac0cb08a00eebf7b00efb5ab726daca/Global/osx.gitignore .DS_Store .AppleDouble .LSOverride # Icon must end with two \r Icon # Thumbnails ._* # Files that might appear on external disk .Spotlight-V100 .Trashes # Directories potentially created on remote AFP share .AppleDB .AppleDesktop Network Trash Folder Temporary Items .apdisk
つまり、こうしてやればいい。
$ gibo osx > .gitignore
最高なツールですねえ。
対応してるボイラープレートは l オプションを付ければよい。便利。
$ gibo -l
また、連続してボイラープレートを指定してやることも可能。
$ gibo java android eclipse > .gitignore
Awsクライアントのラッパークラスを作ると結構便利
以前、こんなライブラリつくった。
Aws のクライアントクラスをシュパッと作れるやつ。
AwsClientManager for PHP というライブラリを作った - Lazuli
AwsSDK はそれ単体だけだとなかなか使いづらくテストに利用しにくい。
ラッパークラスを作ってやるとテストが容易になるかもと気付いてやってみたら結構いい感じに収束できた。
たとえば、何かをアップロードするようなクラスを作った場合。
<?php class Uploader { private $S3; public function setS3 ($S3) { $this->S3 = $S3; } public function upload ($from_path, $to_path) { $result = $this->S3->putObject([ 'Bucket' => 'bucket_name', 'Key' => $to_path, 'Body' => \Guzzle\Http\EntityBody::factory(fopen($from_path, 'r')) ]); return $result; } }
色々端折ってるけど upload メソッドにパスを渡してやると S3 にアップロードできるよ!って感じ。
次に S3 用のラッパークラス。
<?php class S3 { private $client; public function __construct (\Aws\Ec2\Ec2Client $client) { $this->client = $client; } public function putObject ($args) { try { $this->client->putObject($args); } catch (\Exception $e) { throw $e; } return true; } }
Ec2Client クラスに委譲してるだけなんだけどコンストラクタでクライアント渡すようにしてる。
この部分をモックにしてあげればテストに使えるようになる。
<?php class UploaderTest extends PHPUnit_Framework_TestCase { private $uploader; private $S3_mock; public function setUp () { $this->uploader = new Uploader(); $this->S3_mock = $this->getMock('....'); } /** * @test */ public function upload () { $this->uploader->setS3($this->S3_mock); $result = $this->uploader->upload('/tmp/foo.txt', 'foo.txt'); $this->assertTrue($result); } }
setS3 にモックを渡してるから AwsSDK のクラスがどうなっていようと気にすることなくテストが出来る。
実コードのときは正しいクライアントクラスを渡してあげればよい。
AwsClientManager for PHP というライブラリを作った - Lazuli
これを使うのならば、
<?php use S3; use Acm\Acm; $from_path = '/tmp/foo.txt'; $to_path = 'foo.txt'; $S3 = new S3(Acm::getS3()); $uploader = new Uploader->setS3($S3); $uploader->upload($from_path, $to_path);
どやぁ。
■
週末、紅葉を見に行った。
サブカルな写真を目指して撮ったけどそういう才能はなかった。
Nexus5 は画質が悪い。
■
一年前くらいからゲオでレンタルしてる。旧作だと一本70円くらいで借りられて手頃。たぶん蔦屋でも同等の値段だろう。
映画やシリーズもの並行して色々見てるので思い出に残っているものを幾つか挙げてみる。面白いので暇つぶしにはお勧め。
ウォーキング・デッド
ゾンビ物の海外ドラマ。初めて海外ドラマ見たけど映画並の出来で驚いた。ゾンビがリアルで序盤は結構怖かったな。
シーズン2までは純粋にゾンビと戦って RPG っぽい内容で、シーズン3からは人間同士の縄張り争いの抗争になっていく。結構面白い。
- 出版社/メーカー: KADOKAWA / 角川書店
- 発売日: 2014/10/24
- メディア: DVD
- この商品を含むブログ (3件) を見る
SHERLOCK
現代版シャーロック・ホームズ。スマホやタブレットなど現代的な技術を使うのが特徴。謎解きに疑問点があったりするけどスピーディに進んで楽しめる。レストレード警部やマイクロフト、モリアーティなどいつも通りの面々が出てくる。
シーズン3からシャーロックが急激に人間味を帯び、なんだかあという展開になってる。シーズン2までは面白いと思う。
- 出版社/メーカー: 角川書店
- 発売日: 2012/07/06
- メディア: DVD
- 購入: 1人 クリック: 27回
- この商品を含むブログ (64件) を見る
マルドゥック・スクランブル
いつ迄たっても名前が覚えられない。近未来SFの話で、攻殻機動隊に近い内容。そういうの好きな人は楽しめると思う。ただまあ初見さんお断りの内容で初っ端から全然意味が分からない。頭フル回転で見ても疲れるだけなので適当に見てまたいつの日か見返そうくらいの心意気で見るのが一番楽しめると思う。
- 出版社/メーカー: キングレコード
- 発売日: 2011/08/24
- メディア: DVD
- 購入: 1人 クリック: 12回
- この商品を含むブログ (17件) を見る
電脳コイル
いつか見たいなぁと思いつつ見れてなかったから借りて見てる。おもしろい。子供向けの絵柄なのに内容が子供向けっぽくない。中盤からおかしなことになっていて、空間管理局で働いてる女の人が女子高生だったり設定が崩壊し始める。それでも面白い。
- 出版社/メーカー: バンダイビジュアル
- 発売日: 2007/09/25
- メディア: DVD
- 購入: 2人 クリック: 156回
- この商品を含むブログ (167件) を見る
リーガル・ハイ
めっちゃくだらない。まさに暇つぶしという感じで面白い。人気すぎて運の良い時しか借りられないレア素材。
- 出版社/メーカー: TCエンタテインメント
- 発売日: 2012/12/05
- メディア: DVD
- クリック: 11回
- この商品を含むブログ (26件) を見る
ショーシャンクの空に
94年の映画。銀行員だった主人公が冤罪でショーシャンク刑務所に終身刑で服役される。刑務所内でのあれこれを描いている。あらすじを書くのが苦手なので控えるが良い映画だった。
しかし、モーガン・フリーマンはこの頃から今と同じような顔つきで不老なんじゃねえかと思わせる。
- 出版社/メーカー: ワーナー・ホーム・ビデオ
- 発売日: 2010/04/21
- メディア: DVD
- 購入: 15人 クリック: 101回
- この商品を含むブログ (105件) を見る
トゥモロー・ワールド
突如人間が生殖機能を失い、子供の生まれなくなった世界。紛争やテロが頻繁に起きおり、世界的に治安が悪くなっている。そんな中、主人公が出会った黒人の女性が子供を身ごもっていることが分かった。それで…というお話。
長回しが有名な映画で、戦闘シーンや出産シーンは迫力がある。カメラワークも臨場感があって良い。ただ、エンディングは意味不明でそれでいいのか?と思った。
- 出版社/メーカー: ポニーキャニオン
- 発売日: 2007/03/21
- メディア: DVD
- 購入: 4人 クリック: 77回
- この商品を含むブログ (277件) を見る
締め
他にも見たけどだらだら書くのもしんどいのでこのへんで。あとはまたそのうち。