Итак, я боролся с этим уже довольно давно, и я не могу понять, что происходит не так, и не смог найти много информации о том, что может вызвать эту проблему.
Я относительно новичок в Ruby и Rails, а также в разработке, основанной на тестах/поведении, и пытаюсь написать некоторые приемочные (браузерные) тесты, используя PhantomJS через Poltergeist, используя Rspec и Capybara. Я полагаю, что некоторые люди также называют это интеграционными тестами (может быть, с какой-то точки зрения), но это совсем другое обсуждение.
У меня есть очень простая функция, с которой я не могу делать то, что хочу:
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
Так. Просто, правильно. Он должен просто перейти к /login
и передать мне HTML-контент, а также я хочу увидеть страницу, используя save_and_open_page
, и я хочу, чтобы она сделала снимок экрана. Я добавил простую should have_selector
, чтобы тест провалился в попытке получить больше отзывов.
Относительное содержание моего 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
А также мой 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
Все достаточно просто.
Теперь в моей консоли я вижу следующее:
{"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>"}
Кроме того, на скриншоте просто белая и пустая страница. Когда я копаю свой файл log/test.log
, я не вижу, что запрос выполняется. Я попытался изменить метод visit
на get
, и это сделает запрос, но не изменит никаких результатов.
У меня полностью закончились идеи о том, что это может быть, и это довольно расстраивает :(
Окончательная информация о версиях:
- рспек 2.10.0
- капибара 1.1.4
- полтергейст 1.0.3
- рубин 1.8.7
- рельсы 3.2.13
К сожалению, мы все еще на ruby 1.8.7, но работаем над улучшением этой версии. Тем не менее, я думаю, что это не должно влиять на тесты.
Любая помощь будет принята с благодарностью!
http://test.iome:3003/
), вы получите ответ? - person Peter Alfvin   schedule 10.07.2013page.html
теперь также имеет содержимое. Однако, хотя файл скриншота был создан, но раньше был пустым, теперь он вообще не создает файл. Кроме того, я добавляю в базу данных некоторую информацию, необходимую для входа в систему, но эта информация недоступна приложению. Сообщит вам об обновлениях. - person Mark   schedule 10.07.2013