代码之家  ›  专栏  ›  技术社区  ›  khebbie

rspec expect抛出“未定义的方法”

  •  3
  • khebbie  · 技术社区  · 14 年前

    我是一个完全的红宝石新手,正在玩rspec

    我正在测试一个具有以下行的类(帐户):

    attr_reader :balance
    

    当我尝试用这个方法测试它时:

    it "should deposit twice" do
      @acc.deposit(75)
      expect {
        @acc.deposit(50)
        }.to change(Account.balance).to(125)
    end
    

    NoMethodError in 'Account should deposit twice'
    undefined method `balance' for Account:Class
    

    我不明白为什么会出现这个错误,因为属性'balance'存在,但是我可以看到它不是一个方法,但是rspec不能找到它吗?

    更新: 正如杰森所说我应该@acc.balance,因为这就是我的主张。但当我这么做的时候,我得到了“零不是一个符号”。

    3 回复  |  直到 14 年前
        1
  •  4
  •   Jason Noble    14 年前

    应该是的@acc.balance

    it "should deposit twice" do
      @acc = Account.new
      @acc.deposit(75)
      @acc.balance.should == 75
      expect {
        @acc.deposit(50)
        }.to change(@acc, :balance).to(125)
    end
    
        2
  •  1
  •   Jed Schneider    14 年前

    expect {@acc.deposit(50)}.to change(@acc.balance}.to(125 )

        3
  •  1
  •   szeryf    13 年前

    应该是:

    it "should deposit twice" do
      @acc.deposit(75)
      expect {
        @acc.deposit(50)
       }.to change { @acc.balance }.to(125)
    end
    

    请注意,你需要使用花括号 { ... } 而不是括号 ( ... ) @acc.balance . 否则 在传递给之前进行求值 change 需要符号或块的方法。