我有一个Ownership模型,有一个start_date和一个end_date。我在app/models/ownership.rb,中定义了如下方法:
def current?
self.start_date.present? && self.end_date.nil?
end我在spec/models/ownership_spec.rb中测试了这个方法
describe Ownership do
let(:product) { FactoryGirl.create(:product) }
let(:user) { FactoryGirl.create(:user) }
before { @ownership = user.ownerships.build(product: product) }
subject { @ownership }
describe "when owning and giving date are nil" do
before do
@ownership.save
@ownership.update_attributes(start_date: nil, end_date: nil, agreed: true)
end
it { should be_valid }
@ownership.current?.should be_false
describe "then product is owned" do
before { @ownership.update_attributes(start_date: 1.day.ago) }
it { should be_valid }
@ownership.current?.should be_true
end
end
end
end但rspec不喜欢它,于是返回:
undefined method `current?' for nil:NilClass (NoMethodError)你知道为什么我的@ownership对rspec来说是零的吗?
发布于 2013-07-23 10:08:53
您应该将所有断言/检查放到it块中。不要像这样裸着放支票。
it { should be_valid }
@ownership.current?.should be_false # incorrect scope here取而代之的是这样做:
it { should be_valid }
it { subject.current?.should be_false }或者最好这样做:
it { should be_valid }
its(:current?) { should be_false }https://stackoverflow.com/questions/17805064
复制相似问题