这可以在有关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。
答案 0 :(得分:2)
该错误抱怨方法rank=
未定义。请注意,这与rank
不同。使用attr_accessor
定义getter和setter方法
attr_accessor :rank, :suit
这将定义
def rank
@rank
end
def rank=(r)
@rank = r
end
与suit