2016-07-31 6 views
0

Frage: Welche Änderung muss ich vornehmen, damit meine Testergebnisse in der Befehlszeile aufgeräumt werden, anstatt dass meine Druckanweisung angezeigt wird.Rspec 3 Stubbing Benutzereingabe

Ich habe diese Klasse:

class Hello 
    attr_accessor :name 

    def say 
    print "What is your name? " 
    @name = gets.chomp 
    end 
end 

ich dies will, wenn es die Benutzereingabe Namen in den @name speichert.

Mein aktueller Test funktioniert:

it "stores the user's name to a `name` instance variable" do 
    greeting = Hello.new 

    allow(greeting).to receive(:gets).and_return("Brian") 
    greeting.say 

    expect(greeting.name).to eq "Brian" 
end 

Aber es verpestet meine Leistung und erfordert mich auch eingeben zu drücken.

Randomized with seed 40671 

.**What is your name? . 

Pending: (Failures listed here are expected and do not affect your suite's status) 

    1) Hello#say outputs a greeting including the user's name 
    # Temporarily skipped with xit 
    # test/saying_hello_spec.rb:20 

    2) Hello#say outputs the user's name in capitalize format 
    # Temporarily skipped with xit 
    # test/saying_hello_spec.rb:23 


Finished in 2.03 seconds (files took 0.10072 seconds to load) 
4 examples, 0 failures, 2 pending 

Randomized with seed 40671 

Antwort

0

Um Testergebnisse erscheinen in der Befehlszeile zum Schweigen zu bringen, wenn Sie Spezifikationen ausführen, können Sie aus $stdout ‚s Ausgangsstrom Stummel:

before do 
    allow($stdout).to receive(:write) 
end 

Um ein Return-Zeichen mit Ihrem schicken Stubbed-Eingabe, müssen Sie es mit einem Zeilenumbruch-Zeichen zur Verfügung stellen:

allow(greeting).to receive(:gets).and_return("Brian\n") 
+0

Danke Paul. Das funktioniert und prägnante Antwort. –

+0

@ArmanJonVillalobos bitte dann in Betracht ziehen, meine Antwort zu akzeptieren (klicken Sie auf das "✓" unter der Partitur) :) –