【发布时间】:2018-08-07 15:41:13
【问题描述】:
我正在尝试在现有的 Rails 5.1(从 Rails 4 升级)应用程序上使用 Capybara 和 Selenium 设置系统测试,该应用程序已经进行了基于 capybara 的功能测试。这是我到目前为止所做的。
在group :development, :test下的gem文件中:
gem 'chromedriver-helper'
gem 'selenium-webdriver'
gem 'rack_session_access'
在environments/development.rb 和environments/test.rb:
config.action_mailer.default_url_options = { host: 'localhost:3000' }
在spec\rails_helper.rb:
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome)
end
Capybara.configure do |config|
config.default_max_wait_time = 10 # seconds
config.default_driver = :selenium
config.app_host = 'http://localhost:3000'
config.server_host = 'localhost'
end
我遇到的问题是新系统测试和旧功能测试。
通过系统测试,Capybara 似乎没有创建页面对象,因为我得到了undefined local variable or method 'page' 此外,当我在功能测试目录下复制相同的测试时,我没有这个问题。
通过旧 Capybara 功能测试,使用 rackTest 驱动程序,Chrome 窗口打开,但我收到 No route matches [GET] "/rack_session/edit"
config.middleware.use RackSessionAccess::Middleware 已经存在于 environments/test.rb 中
示例系统测试:
require 'rails_helper'
describe User do
let(:user) { create :user }
let(:membership) { create :membership, admin: true}
let(:admin) { create :user, memberships: [membership] }
context 'viewing the index' do
it 'directs you to the appropriate page' do
set_current_user(admin)
visit root_url
click_button 'Manage Users'
expect(page.current_url).to end_with users_path
expect(page).to have_selector 'h1', text: 'Users'
end
end
end
功能测试示例:
require 'rails_helper'
describe 'edit an assignment' do
let(:roster) { create :roster }
let(:user) { create :user, rosters: [roster] }
before :each do
Timecop.freeze Date.new(2018, 1, 10)
set_current_user(user)
end
after :each do
Timecop.return
end
context 'returns the user to the appropriate index page' do
let(:date_today) { Date.new(2017, 4, 4) }
let(:start_date) { Date.new(2017, 3, 31) }
let(:month_date) { date_today.beginning_of_month }
it 'redirects to the correct URL' do
visit roster_assignments_url(roster, date: date_today)
visit new_roster_assignment_url(roster, date: start_date)
click_button 'Create'
expect(current_url)
.to eq roster_assignments_url(roster,
date: month_date)
end
在spec_helper:
def set_current_user(user)
page.set_rack_session user_id: user.id
end
【问题讨论】:
标签: ruby-on-rails selenium testing rspec capybara