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'