gpt4 book ai didi

ruby-on-rails - 使用 rspec、capybara 和 poltergeist 的测试返回空的 html 和空的屏幕截图

转载 作者:行者123 更新时间:2023-12-04 21:44:05 25 4
gpt4 key购买 nike

所以我已经为此苦苦挣扎了很长一段时间,我似乎无法弄清楚我们出了什么问题,也找不到可能导致此问题的太多信息。

我对 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文件,我没有看到正在执行请求。我试过改变方法 visitget ,这将提出请求,但不会改变任何结果。

我完全不知道这可能是什么,这很令人沮丧:(

关于版本的最终信息:
  • rspec 2.10.0
  • capybara 1.1.4
  • 恶作剧 1.0.3
  • ruby 1.8.7
  • rails 3.2.13

  • 不幸的是,我们仍处于 ruby​​ 1.8.7,但正在努力提升该版本。不过,我认为这不应该影响测试。

    任何帮助将不胜感激!

    最佳答案

    所以最终我得到了一位同事的帮助,我们设法解决了它。我们使用了 lvh.me域,因为对该域的任何请求都将在 localhost 中解析,从而使您可以毫无问题地使用子域。您也可以使用 hostname.127.0.0.1.xip.io为了这。

    我们的 spec_helper.rb现在看起来像这样:

    # Use capybara in combination with poltergeist for integration tests
    require 'capybara/rails'
    require 'capybara/rspec'
    require 'capybara/poltergeist'
    require 'rack_session_access/capybara'
    Capybara.default_driver = :poltergeist
    Capybara.always_include_port = true
    Capybara.app_host = 'http://application-test.lvh.me' # Any lvh.me domain resolves to localhost
    Capybara.default_wait_time = 8 # How long capybara should look for html elements

    require 'vcr'
    VCR.configure do |config|
    config.cassette_library_dir = 'spec/vcr_cassettes'
    config.hook_into :fakeweb
    config.ignore_localhost = true
    config.configure_rspec_metadata!
    config.ignore_hosts 'codeclimate.com'
    end

    require 'fakeweb'
    FakeWeb.allow_net_connect = false

    因为我们在 VCR 中 Hook 以记录第一次运行集成测试期间发出的任何请求,所以您的所有集成测试或功能都应包含以下代码:
    before(:all) do
    FakeWeb.allow_net_connect = true
    end

    after(:all) do
    FakeWeb.allow_net_connect = false
    end

    如果要在规范期间更改子域,可以使用以下命令:
    before(:each) do
    @original_host = Capybara.app_host
    Capybara.app_host = 'http://does-not-exist.lvh.me'
    visit '/login'
    end

    after(:each) do
    Capybara.app_host = @original_host
    end

    现在可以使用 page.save_screenshot 来制作屏幕截图在规范期间。希望这可以帮助。

    关于ruby-on-rails - 使用 rspec、capybara 和 poltergeist 的测试返回空的 html 和空的屏幕截图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17551606/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com