Tak więc zmagałem się z tym od dłuższego czasu i nie potrafię zrozumieć, co dzieje się źle, i nie mogłem znaleźć wiele na temat może spowodować ten problem.Testy używające rspec, kapibara i poltergeista zwracają puste html i puste zrzuty ekranu
Jestem względnie nowy w Ruby and Rails, a także w rozwoju opartym na testach i zachowaniu i próbuję napisać kilka testów akceptacji (przeglądarki) za pomocą PhantomJS przez Poltergeist, używając Rspec i Capybara. Wierzę, że niektórzy ludzie nazywają te testy integracyjne (mogą być z jakiejś perspektywy), ale to jest cała inna dyskusja.
Mam bardzo prostą funkcję, że nie mogę dostać się do tego, co chcę:
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. Proste, prawda. Powinien po prostu przejść do /login
i wrzucić zawartość HTML do mnie, a także chcę zobaczyć stronę za pomocą save_and_open_page
i chcę, aby zrobił zrzut ekranu. Dodałem prosty should have_selector
, aby test zakończył się niepowodzeniem, aby uzyskać więcej informacji zwrotnych.
Względne zawartość mojego 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
a także moje 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
To wszystko jest dość prosta.
Teraz, w moim konsoli widzę następujące:
{"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>"}
Również screenshot jest tylko biała i pusta strona. Kiedy kończę mój plik log/test.log
, nie widzę, że wykonywane jest żądanie. Próbowałem zmienić metodę visit
na get
, a to spowoduje żądanie, ale nie zmieni żadnego z wyników.
mam całkowicie zabrakło pomysłów co to może być i jest to dość frustrujące :(informacji
końcowy następnie o wersjach:
- rspec 2.10.0
- Kapibara 1.1.4
- poltergeist 1.0.3
- Ruby 1.8.7
- szyny 3.2.13
Niestety nadal jesteśmy w ruby 1.8.7, ale pracujemy nad podskoczeniem tej wersji. Myślę jednak, że nie powinno to wpłynąć na testy.
Każda pomoc będzie bardzo ceniona!
Jeśli po prostu przejdziesz do przeglądarki i wpiszesz URL (np. "Http: //test.iome: 3003 /") otrzymasz odpowiedź? –
Kiedy przeprowadzam testy: tak. Wydaje mi się jednak, że teraz trochę więcej. To nowy dzień, więc dzieje się coś nowego :) Sądzę, że port używany do testów był nadal w użyciu, co spowodowało, że aplikacja przestała działać podczas startu. Wyglądało na to, że nginx nadal działa. Atrybut 'page.html' również ma teraz zawartość. Jednak, mimo że plik zrzutu został utworzony, ale wcześniej był pusty, nie tworzy go wcale. Ponadto dodaję pewne informacje do bazy danych wymaganej do logowania, ale ta informacja nie jest dostępna dla aplikacji. Poinformuje Cię o aktualizacjach. – Mark
Czy możesz dodać kod do działania kontrolera? Mam ten sam problem i chcę go porównać! :RE –