2014-08-04 3 views
1

Вот мой код:Рубин/Rspec: должен be_false против должен == ложных

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? Благодарю.

+0

вы пробовали 'должны be_false'? Также вы, вероятно, должны использовать '@d.should include 'fish'' – BroiSatse

+0

@BroiSatse Мои извинения. 'should be_false' - это то, что я хотел поставить в исходное сообщение. Я отредактировал его. Я хочу заставить 'should be_false' работать. – arealhumanbean

+1

Посмотреть это сообщение: http://stackoverflow.com/questions/24995582/command-be-true-seems-not-to-work-in-rspec-2-1 –

ответ

7

be_false матчи falsey значения (nil и false) и be_true ссылок truthy значения (кроме nil или false)

От Rspec> 3,0,

be_false переименован в be_falsey и

be_true переименовывается в be_truthy

Если вы хотите, чтобы точно соответствовать false, вы должны использовать

obj.should eq false 

Documentation Смотрите для получения дополнительной информации о «быть» matchers

+0

Идите фигуру. Благодаря! – arealhumanbean

+0

Добавлена ​​дополнительная информация для ответа. :) – Santhosh

Смежные вопросы