为什么这个RSpec示例表现如此

时间:2013-07-24 01:15:07

标签: ruby rspec

尝试一些RSpec期望,并想知道为什么会发生这种情况

describe "rspec" do
    class Team
        def players_on
        11
        end
    end

    it "does wierd things" do           
        hometeam1 = Team.new
        hometeam1.should have(11).players_on         
    end
end

RSpec显示错误

 Failure/Error: hometeam1.should have(11).players_on
       expected 11 players_on, got 8

如果我用期望值8代替11,那么

我的电脑出了什么问题???

2 个答案:

答案 0 :(得分:3)

您错误地使用了have匹配器。来自the docs

  

RSpec提供了几种匹配器,可以轻松设置对它的期望   集合的大小......这些工作适用于任何类似集合的对象 - 对象只需响应#size#length(或两者)。

这意味着它会在对象上调用size / length,因此您的期望与以下内容相同:

hometeam1.players_on.size.should == 11

11.size8(所以8.should == 11,这当然是假的)。您应该使用常规匹配器:

hometeam1.players_on.should == 11

答案 1 :(得分:0)

这就是我应该做的......

describe "rspec" do
    class Team

        def initialize
            @x = ["tom","dick","harry"]
        end

        def players_on_field
            @x      
        end
    end

    it "does wierd things" do           
        hometeam1 = Team.new
        hometeam1.should have(3).players_on_field        
    end
end