所以我有一个用Ruby编写的小游戏程序,有一个玩家类和一个游戏类。玩家有一些属性,如姓名和健康,游戏是一系列具有标题的玩家。我为我的游戏类编写的方法之一列出了数组中玩家的名字:
def list_names
@players.each do |player|
puts "#{player.name}"
end
end
当我运行它时(在Sublime Text中或使用Pry),它按照我期望的方式工作,输出看起来像这样:
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 :(得分:0)
each
方法返回它所作用的数组。 puts
的输出与each
的返回值不同。