Hatena::ブログ(Diary)

気が向いたら RSSフィード

2012-05-02

Rails3.2 でBDD、自動テストとか諸々の環境整えた備忘録

| 04:30 | Rails3.2 でBDD、自動テストとか諸々の環境整えた備忘録を含むブックマーク


Railsでプロジェクトを進めるにあたり、BDD(振る舞い駆動開発)をやりたいと思いまずは環境構築をした覚え書きがこちらです。




Rspecまわり

まずは Rspec のテストを自動化したいと思って参考にしたエントリがこちら。

Curiosity Drives Me


なるほど、SporkGuard というものを使うと自動テストが捗るらしい。

Spork は 高速なテストサーバのようなもので、Guard は自動テストパッケージ。


あと、Rspec でテスト書いて行くにあたって、テスト時のモデルデータを用意するのに Fixture よりも factory_girl が捗るらしい。

詳しくは Func09.com など。

…という事で、これも組み込もう。

以下のエントリを参照した。

rspec, factory_girl, spork, guardによる自動テスト環境の構築 - AnyType




Javascriptまわり

それから、Javascript のテストも書かねば。て事で調べた結果、JSRspec的な位置づけの Jasmine を利用する事にした。


Rails で利用する場合、jasmine-railsgem で入れれば良し。

で、入れると http://localhost:3000/specs とかでブラウザからテスト結果が確認できる。で、ファイル編集したらブラウザも自動リロードするようにしたい。

て事で参考にしたエントリが以下。

Guardを使ってファイル更新時にブラウザをオートリロード – ひげろぐ


guard-livereload と、Chrome, Safari, Firefox 用に存在するエクステンションで実現できるようだ。

エクステンションのDL先はこちらを参照した。




テストを書くモチベーション維持するにはカバレッジ、という事で以下参考。

kennyjのブログ(仮): ruby1.9時代にrcovは使ってはいけない。simplecovを使おう!


Ruby1.8 までは rcov という gem を使うのが主流だったらしいけど、1.9 では simplecov らしい。




CIまわり

最終的に Jenkins で CI やれば万全の体制。

て事で以下のエントリなど。

Jenkins で Rails 3 プロジェクトのテスト結果とカバレッジをグラフ表示する - mallowlabsの備忘録

あーありがち - JasmineをCLIで走らせるならjasmine-headless-webkitが楽すぎる




こんなんなりました

最終的に今入ってるテスト環境まわりの gem は以下のようになった。

group :development, :test do
  gem 'jasmine-rails'
  gem 'guard-rails-assets'
  gem 'guard-livereload'
  gem 'guard-jasmine-headless-webkit'
  gem 'rspec-rails'
  gem 'factory_girl_rails'
  gem 'cucumber-rails'
  gem 'simplecov'
  gem 'simplecov-rcov'
  gem 'ci_reporter'
  gem 'spork'
  gem 'guard-spork'
  gem 'guard-rspec'
  gem 'guard-cucumber'
  gem 'rb-fsevent'
  gem 'growl'
end




…という事で、調べだすとまあ Rails 周りは色々と環境が整ってて凄いな、モダンだなと感心する事しきりでした。Guard 超便利だなあ。


5/10 追記

最近やってるRailsプロジェクトのテスト方法 - #詰んでる日記

こちらがまとまってたー。Redisのテストとかも書かれてて参考にしたい。

2012-04-09

MacでSVNクライアント設定した覚え書き2012

| 23:06 | MacでSVNクライアント設定した覚え書き2012を含むブックマーク

Git全盛ですが、svnクライアントの設定をmacで行ったので備忘録。

OSLion


GUIクライアントで無料のものとして、svnx を利用した。

Google Code Archive - Long-term storage for Google Code Project Hosting.


svnx は diffツールとして FileMerge をデフォルトで使用するのですが、Xcode4.3からは付属していない為、diffMerge というソフトを使います。

SourceGear | DiffMerge


インストールしたら、svnx の preferences から diffツールとして diffmerge を選択します。


この状態でdiffアイコンを押すと、以下のようなエラーが出ます。

"/Applications/svnX.app/Contents/Resources/svndiff.sh: line 66: /usr/local/bin/diffmerge.sh: No such file or directory"


ググったところ、以下のようなISSUEが出てきました。

Google Code Archive - Long-term storage for Google Code Project Hosting.

これの通りに、以下を実行。

cp /Applications/DiffMerge.app/Contents/Resources/diffmerge.sh /usr/local/bin/diffmerge.sh


これで diff 取ったところ、日本語(EUC-JP)のファイルも文字化けしてないし、とりあえずこれで WindowsTortoiseSVNの代わりに運用できそうです。

2012-03-07 Django でお手軽に Pjax

Django でお手軽に Pjax

| 00:21 | Django でお手軽に Pjaxを含むブックマーク


Django アプリで Pjax 導入した。必要なものは全て Github にあった。

Pjax については pjax こそが pushState + Ajax の本命 - punitan (a.k.a. punytan) のメモ こちらのエントリなどが詳しい。




GitHub - defunkt/jquery-pjax: pushState + ajax = pjax

GitHub - jacobian-archive/django-pjax: MOVED - see https://github.com/eventials/django-pjax


clone して適宜配置。

django-pjax は djpjax という名前にした(ハイフン入ると import error になる為)

※ clone した後、__init__.py 置かないと import時にモジュール発見されなくてハマった(Python慣れてない)




コントローラーのサンプル

views.py

from submodule.djpjax.djpjax import pjax
from django.template.response import TemplateResponse

@pjax()
def pjax_get(request):
    ctxt = RequestContext(request, {
        "val1": "Pjax で取ってきたよ",
    })

    return TemplateResponse(request, 'pjax/get.html', ctxt)

django-pjax は Django1.3 から導入されたテンプレートクラスである TemplateResponse をベースに利用しているようです。

リクエストメソッドに @pjax() デコレータを書くだけで、ヘッダ内に X_PJAX があるかをチェックし、レスポンス用のテンプレートを選択して返してくれます。




呼び出し側テンプレートのサンプル

pjax/index.html

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="/path/to/jquery.pjax.js" type="text/javascript"></script>
<div>
    Pjaxテストページだよ
</div>

{#  jQuery.pjax を使って aタグの動作を変更している #}
<script>
  $(document).ready(function() {
    $("a.js-pjax").pjax("#main");
  });
</script>

{# data-pjaxアトリビュートでレスポンスを反映させるidを指定する #}
<div style="margin:10px 0;">
    <a href="/index/pjax_get/" data-pjax="main" class='js-pjax'>Pjaxで遷移する</a><br>
</div>

{# data-pjaxアトリビュートで指定したidが付与されたタグにレスポンスが反映される #}
<div id="main">
    {% if val1 %}
        {{ val1 }}
    {% else %}
        このテキストが変更されます
    {% endif %}
</div>



呼ばれるテンプレート

通常のリクエストで返されるテンプレートが get.html の場合、Pjaxリクエスト時に返されるテンプレートサフィックスに -pjax を付けておけばよきにはからってくれるので、get-pjax.html という名前で用意しておく。




これだけでお手軽に Pjax対応できるので、どんどんやると良いと思います!

2012-02-14 vim-powerline 入れてみた

vim-powerline 入れてみた

| 11:34 | vim-powerline 入れてみたを含むブックマーク


ゆろよろさんのエントリ見てカッコイイと思って入れてみました。

iTerm2 + zsh + tmux + vim で快適な256色ターミナル環境を構築する - ( ???) ゆるよろ日記


f:id:tksthdnr:20120214112248p:image

f:id:tksthdnr:20120214112249p:image

f:id:tksthdnr:20120214112250p:image


こんな感じにできる。

で、エントリの通りにフォントパッチ当てようとしたらエラーが出たので対処法を書き残しときます。


fontforgeインストール後、

./fontpatcher MyFontFile.ttf

すると

The required FontForge modules could not be loaded.

You need FontForge with Python bindings for this script to work.

と怒られました。


調べたら github の issues に上がってました。

Page not found · GitHub

fontforge -lang=py -script fontpatcher MyFontFile.ttf

で無事できました。


あ、それから Terminal.app ではうまく表示されないと書いてありましたが、当方の OSX10.7.3 の方では特に問題無く表示されているようでした。

2012-02-05 文字列をアスキーアートにできるコマンド figlet を知った