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

Rspec shows Undefined method but the object is available in the same block

这适用于 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">

这会是 version/deprecation 问题吗?我正在使用 rspec: 3.8.0.

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

attr_accessor :rank, :suit

这将定义

def rank
  @rank
end

def rank=(r)
 @rank = r
end

suit

也一样