2014-09-30 1 views
5

Изучение как Rspec 3. У меня есть вопрос о совпадениях. В учебнике я слежу основан на Rspec 2.Rspec 3 против Rspec 2 совпадений

describe Team do 

    it "has a name" do 
    #Team.new("Random name").should respond_to :name 
    expect { Team.new("Random name") }.to be(:name) 
    end 


    it "has a list of players" do 
    #Team.new("Random name").players.should be_kind_of Array 
    expect { Team.new("Random name").players }.to be_kind_of(Array) 
    end 

end 

Почему код вызывает ошибку, а один я закомментирована попутно с предупреждением износа.

Ошибка

Failures: 

    1) Team has a name 
    Failure/Error: expect { Team.new("Random name") }.to be(:name) 
     You must pass an argument rather than a block to use the provided matcher (equal :name), or the matcher must implement `supports_block_expectations?`. 
    # ./spec/team_spec.rb:7:in `block (2 levels) in <top (required)>' 

    2) Team has a list of players 
    Failure/Error: expect { Team.new("Random name").players }.to be_kind_of(Array) 
     You must pass an argument rather than a block to use the provided matcher (be a kind of Array), or the matcher must implement `supports_block_expectations?`. 
    # ./spec/team_spec.rb:13:in `block (2 levels) in <top (required)>' 
+1

Проверьте это [ответ] (http://stackoverflow.com/questions/19960831/rspec-expect-vs-expect-with-block-whats-the-difference) для _why? _ –

ответ

6

Вы должны использовать обычные кронштейны для этих тестов:

expect(Team.new("Random name")).to eq :name 

При использовании фигурных скобок, вы передаете блок кода. Для rspec3 это означает, что вы поставите некоторые ожидания о выполнении этого блока, а не на результат выполнения, так, например

expect { raise 'hello' }.to raise_error 

EDIT:

Однако обратите внимание, что этот тест не получится, так как Team.new возвращает объект, а не символ. Вы можете изменить свой тест, поэтому она передает:

expect(Team.new("Random name")).to respond_to :name 

# or 

expect(Team.new("Random name").name).to eq "Random name" 
+0

Я получаю сообщение об ошибке. https://gist.github.com/vezu/85661922adda6a877b48. Спасибо за объяснение. – Benjamin

+1

@Benjamin - Я бы сказал, что это ожидается, так как 'Team.new' возвращает объект, а не символ. Ответ обновлен. – BroiSatse

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

  • Нет связанных вопросов^_^