2017-11-06 6 views
1

Dies ist meine erste Erfahrung mit RoR und ich verwenden das Tool rspec, um meinen Controller zu testen. Aber in den Methoden, ich Aufgaben mit Harke erstellen asynchrone Lösungen wie folgt aus:Wie überprüft man, ob die Rake-Aufgabe beendet wurde?

def scan_all_urls 
    system 'rake scan_all_urls &' 
end 

Und mein Rake Aufgabe ist dies:

task :scan_all_urls => :environment do 
    crawler = Crawler.new 
    urls = Url.all 
    crawler.scan_urls(urls) 
end 

Aber mein Problem ist, am rspec Test:

it 'should scan all url' do 
    params = {} 
    get 'scan_all_urls', params: params, format: :json 
end 

Wie könnte ich einstellen, bis die Rake-Aufgabe zu beenden?

Antwort

1

Sie können die Rake-Aufgabe nicht wirklich überprüfen. Ich würde vorschlagen, dass Sie gute Spezifikationen für Crawler#scan_urls schreiben und vielleicht den Controller einchecken, der Crawler aufgerufen wurde.

Testen Sie auch die Rückgabewerte in Ihrer Controller-Spezifikation. So könnte die Controller-Spezifikation wie folgt aussehen:

it 'should scan all url' do 
    expect(Crawler).to receive(:new).and_call_original 

    params = {} 
    get 'scan_all_urls', params: params, format: :json 

    expect(MultiJson.load response.body).to # something 
end 
Verwandte Themen