【发布时间】:2016-08-02 02:50:45
【问题描述】:
我正在一个 Ionic 应用程序上使用 Capybara 进行集成测试,该应用程序在后端使用 rails,我在成功登录后遇到问题,第二个 visit 什么也没做,我有一个 timeout while waiting for angular。
# test_helper.rb
Dir[Rails.root.join("test/helpers/**/*.rb")].each { |f| require f }
require 'capybara/rails'
require 'capybara/poltergeist'
if ENV['VIEW_IN_BROWSER'] == "true"
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, :browser => :firefox)
end
else
Capybara.javascript_driver = :poltergeist
end
Capybara.server_port = 3000 # serveur rails en mode test
Capybara.always_include_port = true
Capybara.default_max_wait_time = 5
Capybara.raise_server_errors = false
class ActionDispatch::IntegrationTest
# Make the Capybara DSL available in all integration tests
include Capybara::DSL
include Capybara::Angular::DSL
def setup
super
end
def teardown
super
Capybara.reset_sessions!
Capybara.use_default_driver
end
end
我的助手:
#test/helpers/ionic_helper.rb
module IonicHelper
include Warden::Test::Helpers
Warden.test_mode!
def on_ionic_app
Capybara.app_host = 'http://localhost:5000' # Serveur ionic
begin
yield
rescue => error
puts error
ensure
Capybara.app_host = 'http://localhost:4321' # serveur ionic en mode intégration continue
end
end
def user_log_in
user = FactoryGirl.create(:user)
visit(Capybara.app_host+"/#/app/signin")
fill_in "email", with: user.email
fill_in "password", with: user.password
click_on "Connexion"
end
end
第一个问题是我必须将Capybara.app_host 指定给visit 方法才能访问良好的离子端口(5000),我不知道为什么。
我的第二个问题是这个测试:
# reseau_test.rb
require "test_helper"
class ReseauTest < ActionDispatch::IntegrationTest
include IonicHelper
test "On s'assure que tous les elements en mode connecté soient présents" do
Capybara.current_driver = Capybara.javascript_driver
on_ionic_app do
user_log_in
visit(Capybara.app_host+"/#/app/network")
assert page.has_css?('span.count.following.text-center.ng-binding'), "Il doit y avoir un chiffre pour le nombre d'abonnements"
assert page.has_content?('Abonnements'), "Il doit y avoir le texte 'Abonnements'"
assert page.has_css?('span.count.follower.ng-binding'), "Il doit y avoir un chiffre pour le nombre d'abonnés"
assert page.has_content?('Abonnés'), "Il doit y avoir le texte 'Abonnés'"
end
end
end
如果我删除user_log_in,测试工作正常,但此页面必须由登录用户查看,当我测试它时,它会因timeout while waiting for angular 而失败。我可以将Capybara.default_max_wait_time 设置为 30,但同样失败。
【问题讨论】:
-
你的第二个问题是否同时出现在 selenium 和 poltergeist 上?如果是这样 - selenium 在浏览器中显示的内容。
-
是的,两者都存在问题。使用 selenium,浏览器只显示良好的重定向页面(登录后),不要转到第二次访问链接,等待(取决于 default_max_wait_time)并退出。
-
用第二部分更新了我的答案