rspec2为模型类方法抛出'undefined method'(.self)

时间:2012-12-05 21:17:50

标签: ruby-on-rails-3.1 rspec2 rspec-rails

我有一个模型(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)>'

当我将模型从类方法更改为实例方法(删除“self。”)时,控制台只打印出“野生数据”:

  

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“,...

任何想法?

1 个答案:

答案 0 :(得分:0)

所以,我得到了它,我犯了两个错误:

  • 首先,我需要调用类方法(Event.dates_between)而不是实例方法(Event.new.dates_between)

  • 第二,我期待

    [“2012-12-01 18:25:25”,“2012-12-08 18:25:25”,“2012-12-15 18:25:25”]

但是应该已经没有时间进行了操作,这通过在预期的三天内每隔一分钟的时间迭代来搞砸我的控制台

["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