2017-03-29 6 views
0

J'ai le code suivant dans le dossier programmabilitécomment écrire rspec pour la méthode

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 

Je suis en train d'écrire rspec pour la méthode convert_true_false. Je suis nouveau à rspec. toute aide est appréciée.

J'ai essayé de faire ce

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 

mais ce ne est pas ramasser la valeur limite. quand il atteint la méthode convert_true_false il sort depuis @args [: limite] est nul

Merci

+0

Avez-vous essayé quelque chose? – ndn

+0

oui question mise à jour – User7354632781

+0

Pouvez-vous ajouter le code dans votre spécification qui a créé le 'input'? – ndn

Répondre

0

Le problème est que setters reviennent toujours la valeur passée:

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

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

Pour le résoudre, il suffit de vérifier la valeur après l'avoir assignée:

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

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

entrée retourne 1}, @ value = "Y" donc je m'attendais (entrée. value) .to eq ('Y') mais l'erreur est attendue: "Y" obtenu: "N'Y '" – User7354632781

+0

oh je vois votre réponse mise à jour. laissez-moi essayer – User7354632781

+0

même erreur attendue: "Y" a: "N'Y '" – User7354632781