RSpecの書き方がつかめてきた

describe Person do
  subject do
    Person.new(
      :family_name => "Aoki",
      :given_name => "Hanae",
      :age => 20
    )
  end

  it "#name is his name." do
    subject.name.should == "Aoki Hanae"
  end

  context "who became a adult" do
    it "#adult? is true" do
      subject.adult?.should be_true
    end
  end

  context "who did not become a adult" do
    subject do
      Person.new(
        :family_name => "Kaname",
        :given_name => "Madoka",
        :gender => 'female',
        :age => 14
      )
    end

    it "#adult? is false" do
      subject.adult?.should be_true
    end
  end
end

なんかコード例を書いてるうちになにも変わったことしてないことに気がついた。

context Person do
  it "..." do
    # ...
  end

  context "..." do
    describe "#name" do
      it "is ..." do
        # ...
      end
    end
  end
end

こういうコード書いてたのだけど、あるメソッドについてのブロックをとる describe と it がほぼ1対1で対応しているときは、describe をつかう必要はないよなあ、ということに気がついた。

たとえば、引数をとるメソッドの場合に describe でメソッドに対する記述をブロックで切って it で複数ケースについて記述する、というのが考えられそう。

最初のほうは書き方に悩んでなかなかコードが進まなかったんだけど、慣れてくると書きやすいもんですね。インターフェースをきちんと吟味するようになる、っていうのが大事。