首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >新手:模型测试很难构建或保存

新手:模型测试很难构建或保存
EN

Stack Overflow用户
提问于 2013-07-23 08:27:51
回答 1查看 39关注 0票数 0

我有一个Ownership模型,有一个start_date和一个end_date。我在app/models/ownership.rb,中定义了如下方法:

代码语言:javascript
复制
def current?
  self.start_date.present? && self.end_date.nil?
end

我在spec/models/ownership_spec.rb中测试了这个方法

代码语言:javascript
复制
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不喜欢它,于是返回:

代码语言:javascript
复制
undefined method `current?' for nil:NilClass (NoMethodError)

你知道为什么我的@ownership对rspec来说是零的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-23 10:08:53

您应该将所有断言/检查放到it块中。不要像这样裸着放支票。

代码语言:javascript
复制
it { should be_valid }
@ownership.current?.should be_false # incorrect scope here

取而代之的是这样做:

代码语言:javascript
复制
it { should be_valid }
it { subject.current?.should be_false }

或者最好这样做:

代码语言:javascript
复制
it { should be_valid }
its(:current?) { should be_false }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17805064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档