如何为方法编写rspec

时间:2017-03-29 14:11:19

标签: ruby ruby-on-rails-4 rspec rspec-rails rspec2

我在programmability文件夹中有以下代码

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_true_false编写rspec。我是rspec的新手。任何帮助表示赞赏。

我试过这个

   context 'returns Y if passed true'
    input = Programmability::Parameter::Input.new(name, type, limit)

      it 'returns Y' do
        name = 'unregister_series'
        type = ':char'
        limit = 1

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

但它没有达到极限值。当它到达convert_true_false方法时它就会出现,因为@args [:limit]是nil

由于

1 个答案:

答案 0 :(得分:0)

问题是setter总是返回传递的值:

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'