Ruby:函数(似乎)返回正确的值,但rspec失败

Ruby:函数(似乎)返回正确的值,但rspec失败,ruby,rspec,return-value,specifications,Ruby,Rspec,Return Value,Specifications,以下是规格: it 'can check whether a given keyword exists' do @d.include?('fish').should be_false end 以下是我的方法: def include?(k) @entries.each_key do |n| if (n==k) return true end end return false end 如果我这样做了,就说: puts myd.include?('

以下是规格:

it 'can check whether a given keyword exists' do
    @d.include?('fish').should be_false
end
以下是我的方法:

def include?(k)
  @entries.each_key do |n|
    if (n==k)
      return true
    end
  end
  return false
end
如果我这样做了,就说:

puts myd.include?('fish')
控制台打印错误(正确)

但该规范在以下方面失败:

Failure/Error: @d.include?('fish').should be_false
expected false to respond to `false?`
我不知道为什么。我已经为此工作了一天,完全不知所措

事情是这样的:

class Dictionary
  attr_accessor :entries, :keywords

  def initialize
    @entries={}
  end

  def add(entry)
    if entry.class==Hash
      @entries.merge!(entry)
    elsif entry.class==String
      h={entry => nil}
      @entries.merge!(h)
    end
  end

  def keywords
    @entries.keys.sort
  end

  def include?(k)
    @entries.each_key do |n|
      if (n==k)
        return true
      end
    end
    return false
  end


  def find(term)
    results={}
    @entries.each_key do |n|
      if (n.include? term)
        results.merge!(n => @entries[n])
      end
    end
    if (results.length)
      return results
    end
    return false
  end

  def printable
    str=""
    sortedentries = @entries.sort_by { |k, v| k}
    str=sortedentries.map{ |k, v| "[#{k}] \"#{v}\"\n" }.join
    return str
  end
end

Rspec的神奇方法就是在这里咬你。提示出现在错误中:

expected false to respond to `false?
如果您正在测试的东西没有方法
false?
则无法运行
be\u false
。e、 g.
nil.nil?
可以运行,因此
nil.should\u nil
是有效的测试。但是
nil.admin?
不可运行,因此
nil.should\u admin
不是有效的测试


而不是<代码>应为假 >考虑使用<代码>应等于false 。

非常感谢。我知道答案是“false to Response to
false?
”,如果可以的话,我会跟进吗?将
更改为
应为\u false
应等于false
,但更改规格以适应我的代码感觉“错误”。我怎样才能在我的代码中进行更改以满足规范?规范太愚蠢了。你为什么想见到它?无论如何,如果你真的想满足它,失败消息会告诉你该做什么。谢谢你的评论。规范可能很愚蠢,但这是一项任务,任务是满足规范。虽然我很感激你的评论,但如果我知道该怎么做,我会这么做的,我们就不会有这样的对话了。你能帮我理解返回什么以满足
应为false
的条件吗。“但是更改规范以适应我的代码感觉是错误的。我如何才能更改代码以满足规范?”不确定我是否在跟踪你。您希望有一个
.false?
以便可以使用
.be\u false
?或者你想引入一个
。是假的
?嘿,伯克斯。我的意思是,为了满足rspec的要求,我会返回什么?还有,是真的吗?条件(如果“假”和“真”不正确)?我想我正在努力理解的是为什么“假”不能满足“是假”吗?条件有道理?