Rspec: erwarten Sie gegen erwarten Sie mit Block - was ist der Unterschied?

Ich lernte gerade die rspec-Syntax und bemerkte, dass dieser Code funktioniert:

  context "given a bad list of players" do
    let(:bad_players) { {} }

    it "fails to create given a bad player list" do
       expect{ Team.new("Random", bad_players) }.to raise_error
     end 
  end

Aber dieser Code tut nicht:

  context "given a bad list of players" do
    let(:bad_players) { {} }

    it "fails to create given a bad player list" do
       expect( Team.new("Random", bad_players) ).to raise_error
     end 
  end

Es gibt mir diesen Fehler:

Team given a bad list of players fails to create given a bad player list
     Failure/Error: expect( Team.new("Random", bad_players) ).to raise_error
     Exception:
       Exception
     # ./lib/team.rb:6:in `initialize'
     # ./spec/team_spec.rb:23:in `new'
     # ./spec/team_spec.rb:23:in `block (3 levels) in <top (required)>'

Meine Frage ist:

Warum passiert das?Was ist der Unterschied zwischen dem früheren und dem späteren Beispiel genau in Rubin?

Ich suche auchRegeln auf, wann man eins über dem anderen verwendet

Ein weiteres Beispiel für das gleiche, aber umgekehrte Ergebnis, bei dem dieser Code funktioniert:

  it "has a list of players" do
    expect(Team.new("Random").players).to be_kind_of Array
  end 

Dieser Code schlägt jedoch fehl

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

Fehler, den ich in diesem Fall erhalte, ist:

Failure/Error: expect{ Team.new("Random").players }.to be_kind_of Array
       expected #<Proc:0x007fbbbab29580@/Users/amiterandole/Documents/current/ruby_sandbox/tdd-ruby/spec/team_spec.rb:9> to be a kind of Array
     # ./spec/team_spec.rb:9:in `block (2 levels) in <top (required)>'

Die Klasse, die ich teste, sieht folgendermaßen aus:

class Team
  attr_reader :name, :players

  def initialize(name, players = [])
    raise Exception unless players.is_a? Array

    @name = name
    @players = players
  end
end

Antworten auf die Frage(2)

Ihre Antwort auf die Frage