Vì vậy, tôi đã đấu tranh với điều này một thời gian và tôi dường như không thể hiểu được những gì đang xảy ra. có thể có thể gây ra vấn đề này.Các thử nghiệm sử dụng rspec, capybara và poltergeist trả lại các ảnh chụp màn hình html và rỗng rỗng
Tôi khá mới đối với Ruby và Rails, cũng như phát triển thử nghiệm/hành vi và đang cố gắng viết một số thử nghiệm (trình duyệt) bằng PhantomJS thông qua Poltergeist, sử dụng Rspec và Capybara. Tôi tin rằng một số người cũng gọi các bài kiểm tra tích hợp này (họ có thể là từ một số quan điểm), nhưng đó là một cuộc thảo luận hoàn toàn khác.
Tôi có một tính năng thực sự đơn giản mà tôi không thể có được để làm những gì tôi muốn:
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. Đơn giản, đúng. Nó chỉ cần đi đến /login
và ném nội dung HTML vào tôi, cũng như tôi muốn xem trang bằng cách sử dụng save_and_open_page
và tôi muốn nó chụp ảnh màn hình. Tôi đã thêm một đơn giản should have_selector
để thử nghiệm không thành công để có thêm phản hồi.
Nội dung tương đối của feature_helper.rb
tôi:
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
Và cũng spec_helper.rb
tôi:
# 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
Đó là tất cả khá đơn giản.
Bây giờ, trong giao diện điều khiển của tôi, tôi thấy như sau:
{"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>"}
Ngoài ra, các ảnh chụp màn hình chỉ là một trang trắng và trống rỗng. Khi tôi kết thúc tệp log/test.log
của mình, tôi không thấy rằng yêu cầu đang được thực hiện. Tôi đã thử thay đổi phương thức visit
thành get
và điều đó sẽ thực hiện yêu cầu, nhưng sẽ không thay đổi bất kỳ kết quả nào.
Tôi đã hoàn toàn cạn kiệt ý tưởng về những gì này có thể và nó thay vì bực bội :(thông tin
cuối cùng sau đó về các phiên bản:
- rspec 2.10.0
- Capybara 1.1.4
- poltergeist 1.0.3
- ruby 1.8.7
- ray 3.2.13
Thật không may, chúng tôi vẫn đang ở mức ruby 1.8.7, nhưng đang nỗ lực để tăng phiên bản đó. Tuy nhiên, tôi nghĩ rằng điều này không ảnh hưởng đến các bài kiểm tra.
Bất kỳ trợ giúp nào sẽ được đánh giá rất nhiều!
Nếu bạn chỉ cần truy cập trình duyệt và nhập URL (tức là http: //test.iome: 3003/'), bạn có nhận được phản hồi không? –
Khi tôi chạy thử nghiệm: có. Tôi dường như có thêm một chút nữa. Đó là một ngày mới vì vậy những điều mới đang xảy ra :) Tôi tin rằng các cổng được sử dụng cho các bài kiểm tra vẫn còn được sử dụng, gây ra các ứng dụng để timeout lúc khởi động. Dường như nginx vẫn đang chạy. Thuộc tính 'page.html' cũng có nội dung ngay bây giờ. Tuy nhiên, trong khi một tập tin ảnh chụp màn hình đã được thực hiện nhưng đã được trống trước, nó bây giờ không tạo ra một tập tin cả. Ngoài ra, tôi thêm một số thông tin vào cơ sở dữ liệu cần thiết để đăng nhập, nhưng thông tin này không có sẵn cho ứng dụng. Sẽ cho bạn biết thông tin cập nhật. – Mark
Bạn có thể thêm mã cho hành động điều khiển của mình không? Tôi đang gặp vấn đề tương tự và muốn so sánh! : D –