2017-03-29 33 views
0

我在可編程文件夾怎麼寫rspec的進行方法

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 [:上限]是零

感謝

+0

您嘗試過什麼嗎? – ndn

+0

是更新的問題 – User7354632781

+0

您可以在您的規範中添加創建「輸入」的代碼嗎? – ndn

回答

0

的問題是,制定者總是返回傳遞的值:

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' 
+0

輸入返回<可編程::參數::輸入:0x007f99573785a0 @名稱= 「unregister_series」,@類型=:字符,@args = {:極限=> 1},@值= 「Y」,所以我沒想到(輸入。值)。爲了EQ(「Y」),但得到的錯誤預期:「Y」 了:「N'Y'」 – User7354632781

+0

哦,我看到你更新的答案。讓我試試 – User7354632781

+0

預期的錯誤:「Y」得到:「N'Y'」 – User7354632781