失败的rspec测试:返回整个对象而不是字符串(仅在rspec中)

时间:2014-10-07 02:25:46

标签: ruby rspec

所以我有一个用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测试时它返回整个对象。有任何想法吗? (非常感谢你提前!)

1 个答案:

答案 0 :(得分:0)

each方法返回它所作用的数组。 puts的输出与each的返回值不同。