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