0
所以我有一個用Ruby編寫的小遊戲程序,有一個用於玩家的類和一個遊戲類。玩家有一些屬性,如姓名和健康,而遊戲則是一系列擁有頭銜的玩家。有一個問題我寫了我的遊戲類中的方法列出了陣列中的球員的名字:失敗的rspec測試:返回整個對象,而不是一個字符串(只在rspec中)
def list_names
@players.each do |player|
puts "#{player.name}"
end
end
當我運行這個(在崇高的文本或撬),它的工作原理,我期待它的方式,與輸出看起來像這樣:
Margot
Cassandra
但在RSpec中,我寫了下面的測試(一個用於與一個玩家的遊戲,和一個用於多玩家遊戲):
it "can list the names of players" do
expect(@game.list_names).to eq("Margot")
end
和
context "with multiple players" do
it "can list the names of players" do
expect(@game.list_names).to eq("Margot\nCassandra")
end
end
而且他們都失敗了。輸出看起來是這樣的:
expected: "Margot"
got: [#<Player:0x007f885b9e48d8 @name="Margot", @health=100>]
和
expected: "Margot\nCassandra"
got: [#<Player:0x007f885b93fc48 @name="Margot", @health=100, #<Player:0x007f885b93fbd0 @name="Cassandra", @health=150>]
所以它看起來像它返回只是當我運行它自己的名字,但它返回的整個對象時RSpec的測試它。有任何想法嗎? (非常感謝你提前!)
即'@ players.each'返回'@ players',這意味着'list_names()'返回'@ players'。另外,puts在字符串末尾添加一個「\ n」 - 如果在字符串末尾沒有換行符,那麼'puts「的輸出將會是'」Margot \ N「'。 **但它在rspec測試時返回整個對象。**請參閱外部的括號。這不僅僅是對象 - 它是一個包含對象的數組。 – 7stud 2014-10-07 04:22:51