6 Stimmen

stecken geblieben bei about_methods.rb auf den EdgeCase Ruby Koans

Ich bin Hacking meinen Weg durch die EdgeCase RubyKoans (www.rubykoans.com) und bin auf die Methode beginnend in Zeile 35 in about_methods.rb stecken aquí . Die Ausführung von Rake schlägt vorhersehbar fehl und sagt mir, ich solle in Zeile 36 nachsehen. Ich bin mir ziemlich sicher, dass ich die assert_match richtig ("0 für 2"), aber ich weiß nicht, was fehlschlägt. Es ist gut möglich, dass in der assert_raise(___)-Zeile etwas zwischen den Klammern stehen sollte, aber ich habe keine Ahnung, was das sein sollte. Irgendwelche Tipps oder Anstöße? Vielen Dank!

edit: hier ist der kurze Ausschnitt des beanstandeten Codes:

def my_global_method(a,b)
 a + b
end

-snip-

def test_calling_global_methods_with_wrong_number_of_arguments
exception = assert_raise(___) do
  my_global_method
end
assert_match(/"0 for 2"/, exception.message)

exception = assert_raise(___) do
  my_global_method(1,2,3)
end
assert_match(/__/, exception.message)
end

7voto

zetetic Punkte 46520

Versuchen Sie, die Anführungszeichen aus der Regex zu entfernen:

assert_match(/0 for 2/, exception.message)

5voto

steenslag Punkte 75941
exception = assert_raise(___) do

Sie sollten die Unterstriche durch den Fehler ersetzen, den Sie erwarten. Der Fehler ist ein Objekt - welche Art von Objekt? Und wie zetetic sagte, ist die Regex falsch.

3voto

cold_farmer Punkte 41

Ich habe gerade den Test gemacht,

Bei Regex mit Klammern sollte man den Backslash verwenden, da man sonst auf null trifft.

def test_calling_global_methods_with_wrong_number_of_arguments
exception = assert_raise(ArgumentError) do
  my_global_method
end
assert_match(/wrong number of arguments \(0 for 2\)/, exception.message)

exception = assert_raise(___) do
  my_global_method(1,2,3)
end
assert_match(/__/, exception.message)

Finalizar

oder füllen Sie es einfach mit (o für 2)\

beide Wörter~!

2voto

Asyraf Punkte 429

Nach dem Graben der Fehlermeldung, das ist, warum vor dieser Übung, RubyKoan lehrt uns Regex. Ich vergaß zu setzen \ vor ( .

Dies ist meine Antwort;

def test_calling_global_methods_with_wrong_number_of_arguments
    exception = assert_raise(ArgumentError) do
      my_global_method
    end
    assert_match(/wrong number of arguments \(given 0, expected 2\)/, exception.message)

    exception = assert_raise(ArgumentError) do
      my_global_method(1,2,3)
    end
    assert_match(/wrong number of arguments \(given 3, expected 2\)/, exception.message)
  end

1voto

PedroProgrammer Punkte 37

Nachdem ich mich einige Stunden mit diesem Problem beschäftigt hatte, fand ich die Lösung:

def test_calling_global_methods_with_wrong_number_of_arguments
    exception = assert_raise(ArgumentError) do
      my_global_method
    end
    myString = "wrong number of arguments (given 0, expected 2)"  
    assert_match(/#{Regexp.quote(myString)}/ , exception.message)

    exception = assert_raise(ArgumentError) do
      my_global_method(1,2,3)
    end
    myString = "wrong number of arguments (given 3, expected 2)"  
    assert_match(/#{Regexp.quote(myString)}/, exception.message)
end

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X