0

と の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)

なぜ my@ownershipが rspec に対して nil に見えるのか知っていますか?

4

1 に答える 1

0

すべてのアサーション/チェックを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 }
于 2013-07-23T10:08:53.123 に答える