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
也一样
这适用于 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