私はかなり長い間このことに苦労してきましたが、何がうまくいかないのか分からないようです。この問題を引き起こす可能性があります。rspec、capybara、poltergeistを使ったテストでは、空のHTMLと空のスクリーンショットが返ってくる
私はRubyとRails、テスト/ビヘイビア駆動の開発に比較的新しく、RspecとCapybaraを使用してPhantomJSを使ってPhantomJSを使っていくつかの受け入れ(ブラウザ)テストを書こうとしています。私は、この統合テストをいくつかの観点から呼んでいる人もいると思いますが、それは他の議論の全体です。
私は私がやりたいことを得ることができない、本当にシンプルな機能を持っている: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がシンプル、右。それはちょうど/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
に変更しようとしましたが、それはリクエストを行いますが、結果は変更されません。
最終情報を、その後のバージョンについて
:
- RSpecの2.10.0
- カピバラ1.1.4
- ポルターガイスト1.0.3
- ルビー1.8.7
- レール3.2.13
残念ながら、私たちはまだルビー1.8.7ですが、そのバージョンをバンプすることに取り組んでいます。それでも、私はこれがテストに影響を与えるべきではないと思います。
ご協力いただければ幸いです!
ブラウザにアクセスしてURL(つまり、http://test.iome:3003/')を入力するだけで応答が得られますか? –
私はテストを実行しています:はい。私はちょっと今でも少し手に入るようです。新しいことが起きている新しいことです:)テストに使用されたポートがまだ使用中で、アプリケーションが起動時にタイムアウトする原因になると思います。それはnginxがまだ走っていたようでした。 'page.html'属性にもコンテンツがあります。しかし、スクリーンショットファイルは作成されていましたが、以前は空白だったのですが、今はファイルを作成しません。また、ログインに必要な情報をデータベースに追加しますが、この情報はアプリケーションでは使用できません。更新情報をお知らせします。 – Mark
コントローラアクションのコードを追加できますか?私は同じ問題を経験しており、比較したい! :D –