Ruby 如何为方法编写rspec

Ruby 如何为方法编写rspec,ruby,ruby-on-rails-4,rspec,rspec-rails,rspec2,Ruby,Ruby On Rails 4,Rspec,Rspec Rails,Rspec2,我在可编程性文件夹中有以下代码 module Programmability module Parameter class Input < Parameter::Base attr_reader :args def initialize(name, type, **args) super(name, type) @args = args end def value=(val) if val val = conver

我在可编程性文件夹中有以下代码

module Programmability
  module Parameter
    class Input < Parameter::Base
      attr_reader :args

  def initialize(name, type, **args)
    super(name, type)
    @args = args
  end

  def value=(val)
    if val
      val = convert_true_false(val)
--- some code ----
    end
    @value = val
  end      


  def convert_true_false(val)
    return val unless @args[:limit] == 1
    if [:char].include?(@type) && val == 'true'
      'Y'
    elsif [:char].include?(@type) && val == 'false'
      'N'
    elsif [:bit].include?(@type) && val == 'true'
      1
    elsif [:bit].include?(@type) && val == 'false'
      0
    end
  end
end
  end
end
但它并没有达到极限值。当它到达convert\u true\u false方法时,由于@args[:limit]是nil,它就从中出来了


谢谢

问题是设置程序总是返回传递的值:

class Test
  def foo=(foo)
    @foo = foo + 100
    return 42
  end
end

puts (Test.new.foo = 69) # 69
要解决此问题,只需在指定值后检查该值:

# instead of
expect(input.value = 'true').to eq 'Y'

# do
input.value = 'true'
expect(input.value).to eq 'Y'

您尝试过什么吗?是的,您能在您的规范中添加创建
输入的代码吗?很抱歉,没有找到。添加的
args
是关键字参数。因此,您应该执行
Input.new(名称、类型、限制:限制)
。它不应该让您创建对象。输入返回1},@value=“Y”,因此我确实期望(input.value)。对于eq('Y'),但期望得到错误:“Y”得到:“N'Y”
# instead of
expect(input.value = 'true').to eq 'Y'

# do
input.value = 'true'
expect(input.value).to eq 'Y'