Ruby Rspec出现提示“Testing instance variables without adding an accessor to source”,怎么处理?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (7)

我试图测试以下method:

def unprocess_move(board, move)
  if move[0].instance_of?(Array)
    multi_move = @multi_move.pop(2).reverse
    multi_move.each do |single_move|
      unapply_move(board, single_move)
    end
  else
    board = unapply_move(board, move)
  end
  board
end

我想为@multi_move设置状态,但我不想仅为测试添加访问器。没有访问器,有没有办法这样做?

提问于
用户回答回答于

可以使用Object#instance_variable_get方法获取对象的任何实例变量的值,如下所示:

class Foo 
  def initialize
    @foo = 5 # no accessor for that variable
  end 
end

foo = Foo.new
puts foo.instance_variable_get(:@foo)
#=> 5

并且Object#instance_variable_set可以用来设置实例变量值:

foo.instance_variable_set(:@foo, 12) 
puts foo.instance_variable_get(:@foo)
#=> 12

扫码关注云+社区