0

指定された期間のすべての繰り返し日付のリストを取得するモデル(event.rb)メソッドがあります

  def self.dates_between(start_date, end_date)
     dates = (start_date..end_date).step(7).to_a
  end

event_spec.rbで以下を指定するより

  before(:each) do
    @event = FactoryGirl.create(:event)
  end    
  subject { @event }

  ... other working tests ...

  describe '#dates_between' do
    context 'finds recurrences dates of a event' do
      start_date = "2012-12-01 18:25:25"
      end_date = "2012-12-15 18:25:25"
      output_dates = ["2012-12-01 18:25:25", "2012-12-08 18:25:25", "2012-12-15 18:25:25"]

      it 'should call Event with method dates_between' do
        @event.should_receive(:dates_between).with(start_date, end_date)
        @event.dates_between(start_date, end_date)
      end

      it 'should find and return the RIGHT recurrences dates' do
        @event.dates_between(start_date, end_date).should eq(output_dates)
      end
    end
  end

そしてこの失敗を取得します:

1) Event#dates_between finds recurrences dates of a event should find and return the RIGHT recurrences dates
 Failure/Error: @event.dates_between(start_date, end_date).should eq(output_dates)
 NoMethodError:
   undefined method `dates_between' for #<Event:0xb99e9f8>
 # ./spec/models/event_spec.rb:52:in `block (4 levels) in <top (required)>'

モデルをクラスメソッドからインスタンスメソッドに変更すると(「自己」を削除)、コンソールは「ワイルドデータ」を出力するだけです。

22:93:55 "、" 2012-12-01 22:93:62 "、" 2012-12-01 22:93:69 "、" 2012-12-01 22:93:76 "、" 2012-12 -01 22:93:83 "、" 2012-12-01 22:93:90 "、" 2012-12-01 22:93:97 "、" 2012-12-01 22:94:04 "、" 2012 -12-01 22:94:11 "、" 2012-12-01 22:94:18 "、" 2012-12-01 22:94:25 "、" 2012-12-01 22:94:32 "、 ..。。

何か案は?

4

1 に答える 1

0

それで、私はそれを機能させました、私は2つの欠点を作りました:

  • まず、インスタンスメソッド(Event.new.dates_between)ではなく、クラスメソッド(Event.dates_between)を呼び出す必要がありました。

  • 第二に、私は期待しました

    ["2012-12-01 18:25:25"、 "2012-12-08 18:25:25"、 "2012-12-15 18:25:25"]

しかし、時間なしで拡張する必要がありました。これは、予想される3日間、1秒ごとに1分ごとに反復することでコンソールを台無しにしました。

["2012-12-01", "2012-12-08", "2012-12-15"] 

いいえ、私は次のことをします、そしてスペックは緑です:

describe Event do

  subject(:event) { FactoryGirl.create(:event) }

  describe '#dates_between' do
    context 'finds recurrences dates of a event' do
      start_date = "2012-12-01"
      end_date = "2012-12-15"
      output_dates = ["2012-12-01", "2012-12-08", "2012-12-15"]

      it 'should call dates_between with two arguments' do
        event.should_receive(:dates_between).with(start_date, end_date).and_return(output_dates)
        event.dates_between(start_date, end_date).should eq(output_dates)
      end

      it 'should find and return the RIGHT recurrences dates' do
        Event.dates_between(start_date, end_date).should eq(output_dates)
      end
    end
  end

end
于 2012-12-06T22:37:53.680 に答える