Ruby on rails 3.1 rspec2抛出';未定义的方法';对于模型类方法(.self)
我有一个model(event.rb)方法,用于检索指定时段的所有重复日期的列表Ruby on rails 3.1 rspec2抛出';未定义的方法';对于模型类方法(.self),ruby-on-rails-3.1,rspec2,rspec-rails,Ruby On Rails 3.1,Rspec2,Rspec Rails,我有一个model(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 { @
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)>'
1)事件#日期#查找之间的重复发生事件的日期应查找并返回正确的重复发生日期
失败/错误:@event.dates\u介于(开始日期、结束日期)之间。应均衡(输出日期)
命名错误:
未定义的方法“dates_between”#
#./spec/models/event_spec.rb:52:in'block(4层)in'
当我在模型中从类方法更改为实例方法(删除“self”)时,控制台只打印出“野生数据”:
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
“2012-12-01 22:94:25”、“2012-12-01 22:94:32”
有什么想法吗?所以,我让它工作了,我犯了两个错误:
- 首先,我需要调用类方法(Event.dates\u between),而不是实例方法(Event.new.dates\u 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