2017-03-29 5 views
0
Methode schreiben

Ich habe folgenden Code in Programmierbarkeit Ordnerwie rspec für

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 

Ich versuche rspec für Verfahren convert_true_false zu schreiben. Ich bin neu in Rspec. jede Hilfe wird geschätzt.

Ich habe versucht, diesen Grenzwert zu tun

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 

aber seine nicht richtig erfasst. wenn es convert_true_false Verfahren erreicht, da @args aus ihm kommt es [: Limit] ist gleich Null

Dank

+0

Haben Sie schon einmal versucht? – ndn

+0

ja aktualisiert Frage – User7354632781

+0

Können Sie den Code in Ihrer Spezifikation, die die 'Eingabe' erstellt? – ndn

Antwort

0

Das Problem ist, dass Setter immer den Wert zurück übergeben:

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

puts (Test.new.foo = 69) # 69 

es zu beheben, Überprüfen Sie einfach den Wert nach der Zuweisung:

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

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

Eingabe zurückgibt 1}, @ value = "Y" also habe ich erwartet (Eingabe. Wert) .to eq ('Y'), aber Fehler erwartet: "Y" bekam: "N'Y '" – User7354632781

+0

oh ich sehe Ihre aktualisierte Antwort. lass mich versuchen – User7354632781

+0

gleichen Fehler erwartet: "Y" bekam: "N'Y '" – User7354632781