Anonymous Function

tmaesaka の lifelog | カルチャー、ときどきテクノロジー

サンフランシスコとインスタントな夜食

今回は長めの滞在ということで、夜食対策をして渡米しました。

salmon-dinner

引きこもりの旅

夕食は基本的に Whole Foods Market で購入したものを宿泊先に持ち帰って済ませていました。食後に少しリラックスしてから、朝の 4 時すぎまでプログラミングや調べ事をひたすらしてました。朝の 9 時すぎには会社で朝食を食べていたので、モチベーションが高めといえど、よく体がもったなと思います。

夜中の作業は腹が減る

アメリカにいると変な時間にふらっとコンビニに行って食事を買うみたいな行動ができないので、あらかじめ夜食をストックする必要があります。時間を節約するために日本からいろいろインスタント食品を持ち込んだのですが、これが大正解でした。

instant-food

特にフリーズドライの豚汁は最高ですね。小腹が空いたときに手っ取り早く夜食が作れるのは本当にありがたいです。次回はチキンラーメンを多めに持っていこう。

minitest で RSpec っぽくテストを書く方法

このエントリは刻々と変化する RSpec の作法や暗黙のルールに疲れた人むけです。

spec

テストフレームワークとして人気のある RSpec ですが、しばらく使っていると非本質的な話に振り舞わされて疲れることがあります。インターネット上の情報も早いペースで古くなりがちです。こういった事情により RSpec から標準のテストフレームワークに出戻る、あるいは移行するデベロッパが世界中で増えていると聞きます。

移行するといっても、いざコードを書きはじめてから minitest のシンプルすぎる構文に戸惑う人もいるでしょう。そういった人たちのために、なるべく慣れ親しんだテスト構成を標準ライブラリで組む方法を紹介します。

Example Group が恋しくなる

RSpec を使っていると example group を使ってテスト対象を細かく絞ったり、対象の状態に応じたテストを書くことがよくあります。そうすることによって、仕様書のように綺麗なテストが出来上がるからです。Model spec なんかは解りやすい例ですね。

describe SomeModel do
  describe '#func_foo' do
    context 'without xxx' do
      it 'fails to validate' do
        expect(...).to_not be_valid
      end
    end
  end
end

RSpec から離れたいけど、上記のようなテストを書き続けたいと考える人は少なくないと思います。実際にこういう声もあります。

MiniTest::Spec の出番

Ruby 1.9.2 から標準で搭載されている MiniTest::Spec を使うと RSpec 風にテストを書けるようになります。有効にするには test_helper.rb などで require 'minitest/spec' します。

describe SomeModel do
  it 'test case A' do
    assert true
  end

  describe 'nested group A' do
    it 'test case B' do
      assert true
    end
  end
end

有効にすると上記のように RSpec 風にテストを構成できるだけでなく、Assertion の代わりに Expectations を使うことも可能です。

context メソッド

残念ながら MiniTest::Speccontext メソッドを提供してくれません。どうしても欲しければ alias_method :context, :describe 的な monkey patch で無理やり対応できそうですが、おすすめはしません。

ここまで来ると RSpec で良いじゃんと突っ込まれそうですが、ころころ変わる作法にとらわれないための第 1 歩としてはアリじゃないでしょうか。