当我预期失败时,Rspec:nil.should_not be_nil通过。为什么?

时间:2012-06-30 20:19:36

标签: ruby-on-rails unit-testing rspec

在Rails项目中执行一些rspec工作。好奇的是为什么这些不应该通过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?的不良调整,我将与开发人员进行交谈,看看这些覆盖是否真的是必要的。

感谢那些帮助验证我的东西的人。

1 个答案:

答案 0 :(得分:3)

我无法重现您的陈述。我在这样的现有项目中用假规格写了它们。

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意味着什么,这会刺激你的规格。