So habe ich seit einiger Zeit damit zu kämpfen und ich kann nicht scheinen, unsere was falsch läuft, und konnte nicht viel auf was finden könnte möglicherweise dieses Problem verursachen.Tests mit rspec, capybara und poltergeist geben leere html und leere Screenshots zurück
Ich bin relativ neu in Ruby and Rails, sowie test/verhaltensgesteuerte Entwicklung und versuche, einige Akzeptanz (Browser) -Tests mit PhantomJS durch Poltergeist, mit Rspec und Capybara schreiben. Ich glaube, manche Leute nennen das Integrationstests (sie mögen aus einer gewissen Perspektive sein), aber das ist eine ganz andere Diskussion.
Ich habe eine wirklich einfache Funktion, die ich nicht bekommen kann, was ich will:
require 'feature_helper'
feature 'Logging in', :js => true do
scenario 'with incorrect credentials' do
visit '/login'
puts page.html
save_and_open_page
page.driver.render('_screenshot.png', :full => true)
page.html.should have_selector("title", :text => "hi")
end
end
So. Einfach, richtig. Es sollte einfach /login
gehen und den HTML-Inhalt bei mir werfen, außerdem möchte ich die Seite mit save_and_open_page
sehen, und ich möchte, dass sie einen Screenshot macht. Ich habe eine einfache should have_selector
hinzugefügt, um den Test fehlschlagen zu lassen, um mehr Feedback zu bekommen.
Der relative Inhalt meines feature_helper.rb
:
require 'spec_helper'
require 'capybara/rspec'
require 'capybara/rails'
require 'capybara/poltergeist'
include Capybara::DSL
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, {
:debug => true,
:inspector => true
})
end
Capybara.default_driver = :poltergeist
Capybara.javascript_driver = :poltergeist
FakeWeb.allow_net_connect = %r[^https?://(127.0.0.1|localhost)] # allow phantomjs/poltergeist requests
DatabaseCleaner.strategy = :truncation
RSpec.configure do |config|
config.before :each do
# Set the hostname to something with test
@host = "test.iome:3003"
host! @host
Capybara.default_host = Capybara.app_host = "http://#{@host}/"
Capybara.server_port = 3003
Capybara.reset_sessions!
# Start the database cleaner
config.use_transactional_fixtures = false
DatabaseCleaner.start
end
config.after :each do
DatabaseCleaner.clean
end
end
Und auch mein spec_helper.rb
:
# This file is copied to spec/ when you run 'rails generate rspec:install'
ENV["RAILS_ENV"] ||= 'test'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'pry'
require 'fakeweb'
FakeWeb.allow_net_connect = false
Es ist alles ziemlich einfach.
nun in meiner Konsole sehe ich folgendes:
{"name"=>"visit", "args"=>["http://test.iome:3003//login"]}
{"response"=>{"status"=>"fail"}}
{"name"=>"body", "args"=>[]}
{"response"=>"<html><head></head><body></body></html>"}
<html><head></head><body></body></html>
{"name"=>"body", "args"=>[]}
{"response"=>"<html><head></head><body></body></html>"}
{"name"=>"render", "args"=>["_screenshot.png", true]}
{"response"=>true}
{"name"=>"body", "args"=>[]}
{"response"=>"<html><head></head><body></body></html>"}
Auch der Screenshot ist nur eine weiße und leere Seite. Wenn ich meine log/test.log
Datei ankreuze, sehe ich nicht, dass eine Anfrage ausgeführt wird. Ich habe versucht, die Methode visit
zu get
zu ändern, und das wird die Anfrage machen, aber wird nichts von den Ergebnissen ändern.
ich komplett haben die Ideen von laufen, was das sein könnte und es ist ziemlich frustrierend :(
Schluss Informationen dann über Versionen:
- rspec 2.10.0
- Capybara 1.1.4
- poltergeist 1.0.3
- rubin 1.8.7
- Schienen 3.2.13
Leider sind wir immer noch bei Ruby 1.8.7, arbeiten aber daran, diese Version zu verbessern. Trotzdem denke ich, dass dies die Tests nicht beeinflussen sollte.
Jede Hilfe würde sehr geschätzt werden!
Wenn Sie einfach zu Ihrem Browser gehen und die URL eingeben (d. H. "Http: //test.iome: 3003 /') erhalten Sie eine Antwort? –
Wenn ich die Tests durchführe: ja. Ich schein jetzt ein bisschen mehr zu bekommen. Es ist ein neuer Tag, an dem neue Dinge geschehen. Ich glaube, dass der für die Tests verwendete Port noch immer verwendet wurde und die Anwendung beim Booten eine Zeitüberschreitung verursachte. Es schien, dass Nginx noch lief. Das Attribut 'page.html' hat jetzt auch Inhalt. Während jedoch eine Screenshot-Datei erstellt wurde, die zuvor leer war, wird jetzt keine Datei erstellt. Außerdem füge ich der Datenbank einige Informationen hinzu, die für die Anmeldung erforderlich sind, aber diese Informationen sind für die Anwendung nicht verfügbar. Ich werde Sie über Updates informieren. – Mark
Können Sie den Code für Ihre Controller-Aktion hinzufügen? Ich habe das gleiche Problem und möchte vergleichen! : D –