Auf meiner Seite habe ich:Tests UJS Rails mit Capybara, Selen und Rspec
-> eine Form, die den Inhalt einer anderen Website mit einem Ajax-Request mit UJS gemacht kratzt (Fern: true):
<%= simple_form_for @listing, :url => listings_fetch_url, remote: true do |f| %>
<%= f.input :url %>
<%= f.button :submit, id: 'import_button' %>
<% end %>
-> eine andere Form, die von den Schaben ergibt sich aus der Form über
bevölkert wird manuell funktioniert es ...
jedoch w wenn ich versuche, automatisch testen es, tut es nicht. Capybara findet den Submit Button, klickt darauf aber dann hinterlässt es mich auf einer leeren Seite. Hier
ist der Code für den Test:
feature "Listing import" do
scenario "fills in the form fields", js: true do
visit new_search_path
fill_in 'Url', :with => 'www.google.fr'
find('input#import_button').click
expect(page.body).to have_content 'query was'
end
end
Die Controller-Aktionen sind die folgenden:
def fetch
url = listing_params[:url]
@query = Query.new(ScraperService.new({url: url}).perform)
render :fill
end
# Renders an js.erb file
def fill
end
Es scheint wie rspec mit Selen kann nicht js.erb machen Dateien?
Jede Hilfe wird geschätzt!
EDIT
Dank @ThomasWalpole, befestigte ich einen Fehler 500, die Mechanize verhindert die Bahn zu kratzen. Der Inhalt ist jetzt korrekt gekratzt, aber das Problem bleibt bestehen: Die Seite nach dem Klicken auf den Submit-Button wird leer und die Tests enden nach rechts. In den Protokollen Ich habe eine lange Nachricht:
Could not log "render_template.action_view" event. NoMethodError: undefined method
example_group' for nil:NilClass ["/Users/Greg/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/rspec-rails-3.6.0/lib/rspec/rails/view_rendering.rb:67:in
current_example_group'"
die das gleiche Problem wie zu sein scheint: 1 & 2
Capybara mit Selen kann definitiv js machen. Erb-Dateien. Schau in deinen Test.Protokolldatei und sehen Sie, welche Anforderungen gestellt werden, welches Format sie anfordern und wie die Antwortcodes lauten. Führt eines von 'Query.new (ScraperService.new ({url: url}). Perform 'eine weitere Anfrage an die App, läuft in separaten Threads usw.? Wenn ja, verwenden Sie: puma als Ihren Capybara-Server (Capybara.server =: puma)? –
Danke für den Tipp @ThomasWalpole! Das Protokoll enthüllte einen Fehler von 500 Servern, der durch 'require' webmock/rspec'' verursacht wurde, was den Zugriff von Mechanize auf das Web verhinderte. 'Query.new ...' macht keine weitere Anfrage an die App und läuft nicht in einem separaten Thread. Die Verwendung von Puma hat leider nichts geändert. Siehe meine aktualisierte Frage. – Greg
Versuchen Sie downgrade zu rspec 3.5.x - könnte ein Fehler sein in 3.6 –