rspec Ожидает, бросает "неопределенный метод" - PullRequest
3 голосов
/ 10 августа 2010

Я новичок в Ruby и играю с 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 ]

4 голосов
/ 11 августа 2010

Это должно быть @ 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 голос
/ 21 февраля 2012

Это должно быть:

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

Обратите внимание, что вам нужно использовать фигурные скобки { ... } вместо скобок ( ... ) вокруг @acc.balance.В противном случае @acc.balance вычисляется перед передачей методу change, который ожидает символ или блок.

1 голос
/ 11 августа 2010

я думаю, что это должно быть

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...