rspec期望抛出“未定义的方法”

时间:2010-08-10 19:54:31

标签: ruby rspec

我是一个完整的Ruby newby,正在玩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能够找到它吗?

更新: 正如Jason所说,我应该是@ acc.balance,因为这是我所宣称的。但是,在这样做时我得到'nil不是符号'。

3 个答案:

答案 0 :(得分:4)

应该是@ 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

答案 1 :(得分:1)

我认为应该是

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

答案 2 :(得分:1)

应该是:

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

请注意,您需要在{ ... }周围使用大括号( ... )而不是括号@acc.balance。否则@acc.balance在传递给change方法之前会被评估,该方法需要符号或块。