4

Rails プロジェクトでいくつかの rspec 作業を行っています。なぜこれらの should_not be_nil 期待値が通過するのか不思議です。何かご意見は?

it "nils should be nil" do
  @io = nil
  @io.should_not be_nil #passes (shouldn't!!)
  nil.should_not be_nil #passes (shouldn't!!)
  @io.should == nil # passes
  @io.should be_nil # passes
  @io.nil?.should be_true # passes
  #@io.nil?.should be_false # fails as expected
end

更新:ここでのフィードバックに基づいて、この原因を特定することができました (これは にロードされたものによるものですspec_helper)。私は、これらのオーバーライドが本当に必要かどうかを確認するために、開発者と話し合う予定.nil? のスウィズリングが不十分であることが原因であると考えています。.blank?

私の物を確認するのを手伝ってくれた人に感謝します。

4

1 に答える 1

5

私はあなたの発言を再現することはできません。私はこのような既存のプロジェクトで偽の仕様でそれらを書きました。

require 'spec_helper'

describe "Pepper" do
  describe "simplicity" do
  before(:each) { @io = nil }
  # should fail
  it 'should be nil 1' do
    @io.should_not be_nil 
  end
  # should fail
      it 'should be nil 2' do
    nil.should_not be_nil 
  end
  # should NOT fail
  it 'should be nil 3' do
    @io.should == nil
  end
  # should NOT fail
  it 'should be nil 4' do   
    @io.should be_nil
  end
  # should NOT fail
  it 'should be nil 5' do
    @io.nil?.should be_true # passes
  end
  # should fail
  it 'should be nil 6' do
    @io.nil?.should be_false 
  end
  end
end

これは、予想どおり、次の出力を返します。

simplicity
should be nil 1 (FAILED - 1)
should be nil 2 (FAILED - 2)
should be nil 3
should be nil 4
should be nil 5
should be nil 6 (FAILED - 3)

したがって、spec_helperが何かを暗示している可能性があります。これは、仕様を苛立たせています。

于 2012-06-30T21:41:21.133 に答える