rspec failing error: expected false to respond to `false?` rspec failing error: expected false to respond to `false?` ruby ruby

rspec failing error: expected false to respond to `false?`


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)# ...............# ...

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 == trueexpect(actual).to be_falsey    # passes if actual is falsy (nil or false)# ...........#......

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

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

And my spec/test_spec.rb file is -

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  endend

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

arup@linux-wzza:~/Ruby> rspec -v2.14.8arup@linux-wzza:~/Ruby> rspec spec.Finished in 0.00169 seconds1 example, 0 failures

Now I am changing the code in my spec/test_spec.rb file :-

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  endend

and again run the test :-

arup@linux-wzza:~/Ruby> rspec -v2.14.8arup@linux-wzza:~/Ruby> rspec specFFailures:  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 seconds1 example, 1 failureFailed examples:rspec ./spec/test_spec.rb:8 # Dictionary can check whether a given keyword existsarup@linux-wzza:~/Ruby>

Now, they also mentioned in the 3.0.0.beta1 / 2013-11-07 changelog

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