Ruby on Rails Tutorial (39)

以下な宿題について確認な朝練。

  • expect do ... end.to change なあたりの確認
  • subject { page } な記述について確認

change マッチャ

むむ、昔は以下なナニだった模様。

lambda {
  team.add_player(player)
}.should change(roster, :count).by(1)

とは言え、以下な書き方はクラス名が渡されてるあたりが若干微妙。

    it "should increment the Relationship count" do
      expect do
        xhr :post, :create, relationship: { followed_id: other_user.id }
      end.to change(Relationship, :count).by(1)
    end

あと

にてメソッドチェイン云々な記述あり。

メソッドチェイン
change マッチャでは値の変更を比較するメソッドをチェインできます。チェインできるメソッドの種類と、それぞれの意味は次の通りです。

メソッドチェインなし
「receiver.send(message)」が評価後にとにかく変わることを期待します (should_notの場合は変わらないことを期待します)。
by(value)
「receiver.send(message)」の評価前と評価後での値の違いへの期待の差分が value であると期待します。
from(old).to(new)
評価前には old だった「receiver.send(message)」の値が、評価後に new へと変化していることを期待します。
to(new)
評価前の値が何であれ、「receiver.send(message)」の値が評価後に new へと変化していることを期待します。

スはスペックのス 【第 1 回】 RSpec の概要と、RSpec on Rails (モデル編)より引用
読んでるはずなんだけど記憶に無い、ってことはスルーしてるのか後天性記憶不全なのか。

subject { page } の件

これ、capybara なのかな。継続確認しつつ何かあればメモを追記の方向にて。