我是一个完整的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不是符号'。
答案 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
方法之前会被评估,该方法需要符号或块。