0

メソッドと仕様があります。

class Event
  def self.renew_subscription(user)
    subscription = user.subscription

    result = subscription.renew

    user.pay(subscription.plan.price_in_cents) if result

    result
  end
end


let!(:user) { create :user }

describe ".renew_subscription" do
  before do
    user.subscription.stub!(:renew).and_return(true)
    user.subscription.stub!(:plan).
      and_return(Struct.new("SP", :price_in_cents).new(699))
  end

  context "when have to pay" do
    it "pays" do
      user.should_receive(:pay)
      Event.renew_subscription user
    end
  end
end

そこにユーザーbelongs_to :subscriptionとサブスクリプションbelongs_to :plan

subscription.renewand subscription.plan(or )をスタブする方法はありsubscription.plan.price_in_centsますか?

4

1 に答える 1

1

次のようなことをするのはおそらく安全だと思います:

Subscription.any_instance.stub(:renew).and_return(true)
plan = mock_model(Plan)
Subscription.any_instance.stub(:plan).and_return(plan)
plan.stub(:price_in_cents).and_return(699)

他の方法もあると思いますが、参考になれば幸いです。

于 2013-01-03T23:53:27.060 に答える