2014-09-30 10 views
5

Imparare come usare Rspec 3. Ho una domanda sui giocatori. Il tutorial che sto seguendo si basa su Rspec 2.Rspec 3 vs Rspec 2 matchers

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 

Perché è il codice causando un errore durante quella che ho commentato che passa con avviso di ammortamento.

errore

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

Scegli questa [risposta] (http://stackoverflow.com/questions/19960831/rspec-expect-vs-expect-with-block-whats-the-difference) per _why? _ –

risposta

6

Si dovrebbe utilizzare le parentesi normali per questi test:

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

Quando si utilizza parentesi graffe, si sta passando un blocco di codice. Per rspec3 significa che metterete alcune aspettative circa l'esecuzione di questo blocco, piuttosto che sul risultato di esecuzione, così per esempio

expect { raise 'hello' }.to raise_error 

EDIT:

Nota tuttavia che questo test fallirà, come Team.new restituisce un oggetto, non un simbolo. È possibile modificare il test in modo che passa:

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

# or 

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

Ricevo un errore con questo. https://gist.github.com/vezu/85661922adda6a877b48. Grazie per la spiegazione. – Benjamin

+1

@ Benjamin - Direi che è previsto, come 'Team.new' restituisce un oggetto, non un simbolo. Risposta aggiornata – BroiSatse