2014-02-16 21 views
6

Ich möchte Feature-Spezifikationen für die Suche nach Patienten in meiner Practice Management App erstellen.Testen von Suchkick mit RSpec

Bisher habe ich das Netz gesucht und verfolgt haben vorgeschlagenen Lösungen aus:

http://bitsandbit.es/post/11295134047/unit-testing-with-tire-and-elastic-search#disqus_thread

und

https://github.com/karmi/tire/wiki/Integration-Testing-Rails-Models-with-Tire

Beide Artikel Konfigurationen vorgeschlagen für Elasticsearch spec_helper.rb und Reifen. Da Searchkick auf Tyrus basiert, habe ich die Lösungen auf die Klasse Patient angewendet, die das einzige Modell ist, mit dem ich Searchkick verwende.

Allerdings bekomme ich einen 'NoMEthodError' für jede der Konfigurationen. Zum Beispiel mit dem folgenden Code:

spec_helper.rb

RSpec.configure do |config| do 
    . 
    . 
    . 

    config.before :each do 
    Patient.index.delete 
    Patient.create_elasticsearch_index 
    end 

    config.before :all do 
    Patient.index_name('test' + Patient.model_name.plural) 
    end 
end 

bekomme ich folgende Fehlermeldung:

Failure/Error: Unable to find matching line from backtrace 
NoMethodError: 
    undefined method `index_name' 

Gleiches gilt für die Methoden 'index' geschieht und 'create_elasticsearch_index'

Ich bin ziemlich neu in RoR und bin ehrlich gesagt nicht sicher, was ich hier falsch machen könnte, außer vielleicht für die Annahme, dass ich Tyres Lösungen auf verwenden könnte Suchkick. So wird jede Hilfe sehr geschätzt!

Antwort

0

Auch wenn Searchkick auf Tyre basiert, bedeutet das nicht, dass die Tire-Methoden auf Ihren Modellen verfügbar sind. Informationen darüber, welche Methoden verfügbar sind, finden Sie unter https://github.com/ankane/searchkick. Sehen Sie den Unterabschnitt https://github.com/ankane/searchkick#migrating-from-tire insbesondere für einen Kontrast zwischen der Verwendung von Searchkick und der Verwendung von Tyre.

+0

Danke für den Tipp :) Ich recherchierte über die Links, die Sie bereitgestellt haben. Ich habe gesehen, dass die index_name-Methode immer noch in Searchkick verwendet wird, aber in Form von 'searchkick index_name:' new_index_name '', anstatt die Methode direkt auf der Klasse aufzurufen. Ich entschuldige mich, wenn mir die Antwort hier entgeht. Mein Problem liegt jedoch im Kontext einer Testumgebung und nicht in den Klassenmodellen, die in den Searchkick-Dokumentationen enthalten sind. – mfamador

+0

Entschuldigung, aber ich verstehe Ihren Kommentar nicht. Was hat der Kontext der Testumgebung mit der Verwendung der API zu tun? –

+0

Ja, der letzte Satz klang verwirrend. Ich war im Wesentlichen auf der Suche nach Testdokumenten zur Einrichtung von RSpec. Der Ersteller von seekkick hat die folgende Lösung veröffentlicht. Aber danke für die Hilfe, immer noch! : D – mfamador

24

Searchkick braucht bessere Test Dokumentation, aber hier ist der Kern von ihm:

Searchkick automatisch einen anderen Indexnamen in jeder Umgebung verwendet, so dass keine Notwendigkeit zu tun, jede aufgebaut. Führen Sie in der Konsole Patient.searchkick_index.name aus, um dies zu bestätigen.

Anstatt den Index zu löschen und neu zu erstellen, können Sie einfach reindex anrufen.

RSpec.configure do |config| do 
    config.before :each do 
    Patient.reindex 
    end 
end 

Schließlich, nach Einfügen von Daten, rufen Patient.searchkick_index.refresh vor Patient.search aufrufen. Dadurch wird Elasticsearch angewiesen, den Index sofort zu aktualisieren (statt nach dem Aktualisierungsintervall, das standardmäßig auf 1 Sekunde festgelegt wird).

+2

Super !!!Du bist ein absoluter Lebensretter: D Und ein großes Dankeschön für das Juwel, da es mir viel Zeit erspart hat, ElasticSearch einzurichten. – mfamador

+1

Super !!! Gespeichert viel Haar ziehen – Jani

+1

Danke @ andrew-kane – Dean