[RUBY] Testen Sie Nokogiri mit Rspec.

Ich habe mich über das an Nokogiri übergebene Argument lustig gemacht und es getestet, also lass es.

FUGA_FUGA = ['Unternehmen', 'Geheimnis']
def hogegiri_method(fuga)
  HOGE_COUNT = 5
  HOGE_COUNT.times do |time|
    html = Nokogiri::HTML(OpenURI.open_uri(url))
    a, b, c =Regulärer Ausdruck flauschig
    break if FUGAFUGA.include?(a)
  end
  { a: a, b: b, c: c }
end

Es ist ein scheißartiger Code, weil es ein Code ist, der nicht auf verschiedene Arten angezeigt werden kann, aber dieses Mal möchte ich einen falschen Rückgabewert als Mock erstellen.

html = Nokogiri::HTML(OpenURI.open_uri('Geheimnis'))

Hier

Es ist jedoch schwierig, den Rückgabewert von Nokogiri direkt mit and_return festzulegen.

Eine solche

Mit anderen Worten, Sie müssen nokogiri die Arbeit machen lassen, aber nicht auf die URL zugreifen und die gewünschten Daten erhalten.

Was ist dann zu tun

OpenUri.open_uri

Verspotten Sie den Rückgabewert dieses Typen und übergeben Sie den Wert, der an das Argument von Nokogiri übergeben werden soll.

Es scheint, dass der HTML-Code, den Sie analysieren möchten, im Argument von Nokogiri enthalten ist. In der Produktionsumgebung können Sie dann den HTML-Code der URL kopieren, auf die zugegriffen und abgerufen werden soll, eine HTML-Datei erstellen, dort einfügen und den Rückgabewert nachahmen! !! Ich habe keinen Artikel darüber geschrieben, wie einfach es war.

Endgültige Antwort

spec/test.html


HTML-Kopie
allow(OpenURI).to receive(:open_uri).and_return(File.new("#{Rails.root}/spec/test.html"))

Komplett Jetzt funktioniert die Methode so, als würden Sie auf die URL zugreifen und sie abrufen. Wenn Sie das Argument von and_return wie nil, File.new (" # {Rails.root} /spec/test.html ") ausführen, können Sie den Wert als Logik der diesmal erstellten Methode nicht erhalten, bis zu 5 Da es sich um Schleifen handelt, können Sie auch bestätigen, dass es sich um eine Schleife handelt.

Seit ich mit dem Praktikum angefangen habe, mache ich Dinge, die ich in meiner persönlichen Entwicklung niemals tun würde, also werde ich jedes Mal stecken bleiben, aber ich versuche irgendwie unterrichtet und klebrig zu werden

Kann ein wenig gewachsen sein

Recommended Posts

Testen Sie Nokogiri mit Rspec.
[Schienen] Test mit RSpec
Testen Sie Active Strage mit RSpec
Testen Sie den GraphQL-Resolver mit rspec
Kopieren Sie den Test und fügen Sie ihn mit RSpec ein
[Schienen] Machen wir einen Unit-Test mit Rspec!
[Ruby on Rails] Test mit RSpec anzeigen
[Ruby on Rails] Modelltest mit RSpec
Ausführung des RSpec-Testcodes
Integrationstest mit Gradle
[Für Anfänger] Testen Sie die Benutzerregistrierung bei RSpec
Verwenden Sie Webmock mit Rspec
Automatisch mit Messgerät testen
Lasttest mit JMeter
Machen Sie einen Unit-Test mit Junit.
Testen Sie die Web-API mit junit
Überprüfen Sie den CSV-Wert mit RSpec
[Rails] Testcode mit Rspec
[Rails] Informationen zum Rspec-Antworttest
So löschen Sie das Testbild, nachdem Sie den Rspec-Test mit CarrierWave ausgeführt haben
Bild-Upload mit CarrierWave ~ Rspec-Test ~
Prüfung
REST-API-Test mit REST Assured Part 2
Prüfung
Ausgabe Testabdeckung mit Klee + Gradle
[Rails5] Rspec -Einheitentest beim Verschachteln-
Prüfung
Über App-Tests RSpec (Unit Test)
Prüfung
[Java] Testen Sie private Methoden mit JUnit
Einschlussbeziehungen der Testliste zu AssertJ
Testen Sie den Spring Framework Controller mit Junit
[RSpec] Unit Test (mit gem: factory_bot)
MASCHINE testet lineare Regression mit mehreren Variablen
Führen Sie RSpec ein und schreiben Sie den Unit-Test-Code
Java EE Test (CDI / Interceptor) mit Arquillian
[Hinweis] Erste Schritte mit Rspec
Führen Sie einen Transaktionsbestätigungstest mit Spring Boot durch
So testen Sie den privaten Bereich mit JUnit
Der JUnit 5-Gradle-Test führt zu einem Fehler mit der Lombok-Annotation
Einführung eines automatisierten Java-Tests mit JUnit 5 + Gradle
Formularklassenvalidierungstest mit Spring Boot
[Rails] Ich möchte mit RSpec testen. Wir unterstützen Ihren Schritt [Einführungsverfahren]