Rspec显示了未定义的方法,但是对象在同一块中可用

时间:2019-03-25 22:06:00

标签: ruby rspec

这可以在有关rspec的教程中使用:

class Card
  attr_reader :rank, :suit

  def initialize(rank, suit)
    @rank = rank
    @suit = suit
  end
end

RSpec.describe Card do
  let(:card) {Card.new('Ace', 'Spades')}

  it 'has rank and rank can change' do
    expect(card.rank).to eq('Ace')
    card.rank = 'Queen'
    expect(card.rank).to eq('Queen')
  end
  it 'has suit' do
    expect(card.suit).to eq('Spades')
  end
end

但是它在实时代码中不起作用。运行rspec时,我得到:

NoMethodError:
   undefined method `rank=' for #<Card:0x007fdddf8d2420 @rank="Ace", @suit="Spades">

会是版本/弃用问题吗?我正在使用rspec:3.8.0。

1 个答案:

答案 0 :(得分:2)

该错误抱怨方法rank=未定义。请注意,这与rank不同。使用attr_accessor定义getter和setter方法

attr_accessor :rank, :suit

这将定义

def rank
  @rank
end

def rank=(r)
 @rank = r
end

suit

相同