rspec 失败错误:预期为 false 以响应 `false?` [英] rspec failing error: expected false to respond to `false?`

查看:55
本文介绍了rspec 失败错误:预期为 false 以响应 `false?`的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在运行测试的这一部分:

I am running this portion of a test:

 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

使用此代码:

class Dictionary
  def initialize
    @hash = {}
  end 

  def add(new_entry)
    new_entry.class == String ? @hash[new_entry] = nil : new_entry.each { |noun, definition| @hash[noun] = definition}    
  end 

  def entries
    @hash 
  end 

  def keywords
    @hash.keys
  end

  def include?(word)
    if @hash.has_key?(word)
      true
    else 
      false
    end 
  end 
end 

我不知道我做错了什么,但我的测试一直失败并说:

I don't know what I'm doing wrong, but my tests keep failing and saying this:

> 1) Dictionary can check whether a given keyword exists
>      Failure/Error: @d.include?('fish').should be_false
>        expected false to respond to `false?`

我对错误感到困惑,因为它似乎给出了正确的答案.如果有人能花几分钟告诉我我的代码有什么问题,我将不胜感激.谢谢吨.

I am confused at the error since it seems to be giving the correct answer. I would really appreciate if someone could take a few minutes to tell me what's wrong with my code. Thank you tons.

推荐答案

如果您浏览 RSpec 期望 2.99RSpec Expectations 2.14 并搜索部分 - Truthiness andexistentialism,你会发现

If you browse the RSpec Expectations 2.99 and RSpec Expectations 2.14 and search the section - Truthiness and existentialism, you will find

expect(actual).to be_true  # passes if actual is truthy (not nil or false)
expect(actual).to be_false # passes if actual is falsy (nil or false)
# ...............
# ...

但是你们浏览 RSpec 期望3.0 ,上面的方法名改为-

But of you browse RSpec Expectations 3.0 , the above method names got changed to -

expect(actual).to be_truthy    # passes if actual is truthy (not nil or false)
expect(actual).to be true      # passes if actual == true
expect(actual).to be_falsey    # passes if actual is falsy (nil or false)
# ...........
#......

您似乎在 3.0 中,并且使用此版本之前存在的方法.因此你得到了错误.

It seems you are in 3.0, and using the method which were exist prior to this version. Thus you were getting the error.

我将代码放在我的 test.rb 文件中,如下所示:-

I put the code in my test.rb file as below :-

class Dictionary
  def initialize
    @hash = {}
  end 

  def add(new_entry)
    new_entry.class == String ? @hash[new_entry] = nil : new_entry.each { |noun, definition| @hash[noun] = definition}    
  end 

  def entries
    @hash 
  end 

  def keywords
    @hash.keys
  end

  def include?(word)
    if @hash.has_key?(word)
      true
    else 
      false
    end 
  end 
end

我的 spec/test_spec.rb 文件是 -

require_relative "../test.rb"

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
end

现在我从我的控制台运行代码,它可以工作:

Now I am running the code from my console, and it works :

arup@linux-wzza:~/Ruby> rspec -v
2.14.8
arup@linux-wzza:~/Ruby> rspec spec
.

Finished in 0.00169 seconds
1 example, 0 failures

<小时>

现在我正在更改我的 spec/test_spec.rb 文件中的代码:-

require_relative "../test.rb"

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

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

再次运行测试:-

arup@linux-wzza:~/Ruby> rspec -v
2.14.8
arup@linux-wzza:~/Ruby> rspec spec
F

Failures:

  1) Dictionary can check whether a given keyword exists
     Failure/Error: @d.include?('fish').should be_falsey
     NoMethodError:
       undefined method `falsey?' for false:FalseClass
     # ./spec/test_spec.rb:9:in `block (2 levels) in <top (required)>'

Finished in 0.00179 seconds
1 example, 1 failure

Failed examples:

rspec ./spec/test_spec.rb:8 # Dictionary can check whether a given keyword exists
arup@linux-wzza:~/Ruby>

<小时>

现在,他们还在 3.0.0 中提到.beta1/2013-11-07 更新日志

be_truebe_false 重命名为be_truthybe_falsey.(山姆·菲彭)

Rename be_true and be_false to be_truthy and be_falsey. (Sam Phippen)

这篇关于rspec 失败错误:预期为 false 以响应 `false?`的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆