2014-10-07 30 views
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的測試它。有任何想法嗎? (非常感謝你提前!)

回答

0

each方法返回它所作用的數組。 puts的輸出與each的返回值不同。

+0

即'@ players.each'返回'@ players',這意味着'list_names()'返回'@ players'。另外,puts在字符串末尾添加一個「\ n」 - 如果在字符串末尾沒有換行符,那麼'puts「的輸出將會是'」Margot \ N「'。 **但它在rspec測試時返回整個對象。**請參閱外部的括號。這不僅僅是對象 - 它是一個包含對象的數組。 – 7stud 2014-10-07 04:22:51