リファクタリングについて考えたりとか、rspecの高速化とか

/ 18日目/ 4週目・作業週 コメント

再度リファクタリング

ActiveDecoratorで実装してた部分をModelに移す。<- 見た目に関係しないコードはできるだけモデルでやる方針

方針

  1. 内部でhelperを使ってないコードとそうでないコードをわける

Springでrspecの高速化

単体テストを手動で走らせるのに結構時間かかるので。

調べると、springというのが良さそう。

個人でつかうため、プロジェクトのGemfileは使わずにやる方法。

$ gem install spring
$ spring rspec

gem バージョンが古いというエラーが出るので、gemのアップデート

$ gem install rubygems-update
$ update_rubygems

次のようにするといいらしい

$ gem pristine --all

gem pristine: gemの隠し場所にあるファイルからインストールしたgemを初期状態へ戻す

from: Rubyのパッケージマネジメントシステムgem(Rubygems)のコマンド一覧

$ spring rspec hoge_spec.rb
Version: 0.9.2

Usage: spring COMMAND [ARGS]

Commands for spring itself:
....

あれ・・・?

こういうのがある

$ gem install spring-commands-rspec

~/.spring.rbに次のように書く

require "spring/commands/rspec"
$ spring rspec path/to/hoge_spec.rb

成功。結構速くなって嬉しい。

参考その1

spec_helper等、specファイル中でロードエラーが出る場合。

$ spring rspec path/to/hoge_spec.rb
require': cannot load such file -- spec_helper (LoadError)

こんな時は、プロジェクトルートで一回spring rspecを実行しておく

$ spring stop
$ cd $PROJECT_ROOT
$ spring rspec path/to/hoge_spec.rb

これで、プロジェクトルートをカレントディレクトリとしてspringでrailsが読み込まれるので、requireでパスを正しく読み込める。

参考その2

emacsのrspec-modeで、上記のようにしてspringを使うと、自動ではspringがONにならない。 これはtmpにpidファイルが作られないため。 強制的にspringを使うには、次のように設定する。

(require 'rspec-mode)
(defun rspec-spring-p ()
  (and rspec-use-spring-when-possible
       (stringp (executable-find "spring"))))

ちなみに、rspec-modeではC-c , vで開いているファイルに関連するテストだけを走らせる事ができる。

guard、使ったほうががいいですか

guardと組み合わせて使ってる人が多いみたい。guardは以前rails-tutorialやってる時に使ったけど、裏で走り続けるのがCPUの無駄使いにしか思えなくて使わなくなってしまった。guardの結果がエラーでも無視してコーディングすることも多かった。guard使ったほうがいい理由は、書いているコードが意図しない影響をもたらしてしまうことにすぐに気付いて方向修正できることなんだろうけど、commitの前にテストが通るか確認するだけでも十分な気もする。

Gitのpre-commit-hookでテスト走らせる

そんなことを考えていて、Gitのpre-commit-hookでテスト走らせればいいんじゃないかと思いつきました。同じようなことを考えた先達がいたようです。

コミットにあまりに時間がかかるのは考えものですが、一回やってみてもいいかも。

Capybaraを使ったテストがOpenSSL::SSL::SSLErrorでコケる

omniauthで登録する画面でエラーが出る(OSX 10.9, ruby2.0, rails3.2.12)。

save_and_open_pageでブラウザ開いてみると、OpenSSL::SSL::SSLError

ここの、Errors with Ruby 2.0 > Alternative の手順で解決。SSL証明書が古くなっていたのが原因のよう。

kowabanaのローカル環境作った時からコケてて、そういうものかと放置してたのですが、@komagataさんに聞いたところ普通は全部通るとの事だったので、やっぱりか!、と思って調べてみました。

新知識

コメント