Ich implementiere Seitenobjekte und schreibe Tests, um sie zu überprüfen. Ich möchte die Tests vereinfachen, indem ich die Elementnamen in einem Array von Symbolen abspeichern und durchlaufen kann, aber es schlägt fehl.Objekt.respond_to? Fehler beim Abrufen des Methodennamensymbols aus Array
def setup
@browser = Watir::Browser.new :phantomjs
@export_page = ExportPage.new @browser
@assets = %i{:section :brand}
end
-
#PASSES
def test_static
$stdout.puts :section.object_id
raise PageElementSelectorNotFoundException, :section unless @export_page.respond_to? :section
end
> # 2123548
Dies passiert, weil die Zielklasse diese Methode nicht implementiert, aber:
#FAILS
def test_iterator
@assets.each do |selector|
$stdout.puts selector.class
$stdout.puts selector.object_id
$stdout.puts :section.object_id
raise PageElementSelectorNotFoundException, selector unless @export_page.respond_to? selector
end
end
> # Testing started at 11:19 ...
> # Symbol
> # 2387188
> # 2123548
PageElementSelectorNotFoundException: :section missing from page
~/src/stories/test/pages/export_page_test.rb:20:in `block in test_iterator'
Wie Sie sehen können, habe ich die Objekt-IDs der überprüft haben Symbole und sie scheinen anders zu sein. Könnte das der Grund sein, warum es scheitert? Gibt es dafür eine Lösung?
Vielen Dank. Es war ein Schuljungsfehler, oder? Ich werde diese wählen, weil es eine prägnantere Antwort ist und es idiomatische Ruby fördert. –
Ich würde es eher ein Tippfehler als von einem Schuljungen Fehler halten :) – mudasobwa