Ruby / Rspec:应该是_false vs should == false

时间:2014-08-04 10:28:32

标签: ruby object rspec

这是我的代码:

class Dictionary
  def entries
    @entries ||= {}
  end

  def add(hash)
    if hash.class == Hash
      hash.each_pair do |k, v|
        entries[k] = v
      end
    else
      makehash = {hash => nil}
      self.add(makehash)
    end
    @entries = entries
  end

  def keywords
    @entries.keys
  end

  def include?(k)
    if @entries == nil
      false
    elsif self.keywords.include?(k)
      true
    else
      false
    end
  end
end

这是我正在进行的测试:

require 'dictionary'

describe Dictionary do
  before do
    @d = Dictionary.new
  end

  it 'can check whether a given keyword exists' do
    @d.include?('fish').should be_false
  end

现在,该测试将失败。但是,如果我将其更改为

  it 'can check whether a given keyword exists' do
    @d.include?('fish').should == false
  end
然后它就过去了。

如何更改我的代码,以便should be_false通过而不是should == false?感谢。

1 个答案:

答案 0 :(得分:7)

be_false匹配falsey值(nilfalse)和 be_true匹配真实值(nilfalse除外)

来自Rspec> 3.0,

be_false已重命名为be_falsey

be_true已重命名为be_truthy

如果您想与false完全匹配,则应使用

obj.should eq false

有关'be'matchers

的更多信息,请参阅Documentation