0

私のモデルPassagesにはメソッドがありますreceives_damage

def receives_damage
  self.damage += 1

  self.phrases.each do |phrase|

    if !phrase.blank && phrase.hit_points <= self.damage
      phrase.blank = true
      phrase.content = phrase.content.gsub(/./, "&nbsp;")

      phrase.save
    end
  end

  self.save
end

私のモデル仕様には次のreceives_damageものがあります。

it "it increases the damage by 1"

it "it blanks any phrases with few enough hitpoints"

最初の仕様は簡単に書くことができましたが、2 番目のケースでは副作用をテストしていて、その方法がわかりません。

ありがとう

z。

4

2 に答える 2

1

最初のリファクタリング、パッセージはフレーズについて知りすぎています。

パッセージ:

def receives_damage
  self.damage += 1

   phrases.each do |phrase|
     phrase.tap { |p| p.on_blank }.save if phrase.blankable?(damage)
   end

  save
end

フレーズで:

def on_blank
  self.blank   = true
  self.content = content.gsub(/./, "&nbsp;")
end

def blankable?(damage)
  !blank && hit_points <= damage
end

次に、フレーズ オブジェクトが正しいメソッドを受け取るかどうかを確認します。

于 2013-05-22T08:57:32.460 に答える