【发布时间】:2020-07-20 11:12:25
【问题描述】:
我将 selenium webdriver 添加到我的测试设置中,以开始编写一些基于 javascript 的测试。我加了
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome)
end
Capybara.javascript_driver = :selenium_chrome
Capybara.configure do |config|
config.default_max_wait_time = 5
config.default_driver = :selenium
end
到我现在看起来像这样的 Rails 助手
rails_helper.rb
require "spec_helper"
ENV["RAILS_ENV"] ||= "test"
require File.expand_path("../config/environment", __dir__)
# Prevent database truncation if the environment is production
abort("The Rails environment is running in production mode!") if Rails.env.production?
require "rspec/rails"
require "capybara/rspec"
Dir[Rails.root.join("spec", "support", "**", "*.rb")].each { |f| require f }
begin
ActiveRecord::Migration.maintain_test_schema!
rescue ActiveRecord::PendingMigrationError => e
puts e.to_s.strip
exit 1
end
RSpec.configure do |config|
config.infer_spec_type_from_file_location!
Capybara.register_driver :selenium do |app|
Capybara::Selenium::Driver.new(app, browser: :chrome)
end
Capybara.javascript_driver = :selenium_chrome
Capybara.configure do |config|
config.default_max_wait_time = 5
config.default_driver = :selenium
end
# Filter lines from Rails gems in backtraces.
config.filter_rails_from_backtrace!
# arbitrary gems may also be filtered via:
# config.filter_gems_from_backtrace("gem name")
# Include Factory Bot syntax methods
config.include FactoryBot::Syntax::Methods
# Configure Database Cleaner
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner.clean_with(:truncation)
end
config.around(:each) do |example|
DatabaseCleaner.cleaning do
example.run
end
end
end
在这些更改之后,我之前的功能测试失败了,因为现在它们不使用在测试中创建的固定装置。
即features/article_spec.rb
require "rails_helper"
RSpec.describe "articles", type: :feature do
before :each do
create(:article, published: false)
create(
:article,
name: "Published article",
body_text: "Lorem ipsum",
published_at: Time.now,
published: true
)
end
describe "article feature" do
it "shows only published articles" do
visit("/articles")
expect(page).to have_css(".article-container", count: 1)
end
end
end
测试没有无头运行,因此我可以继续查看,尽管在 article_spec.rb 中创建,但没有文章存在。我假设驱动程序使用另一台服务器和/或另一个数据库执行测试,但我不确定。在这种情况下,不知道如何更改或如何为该数据库播种。你们有什么线索吗?
【问题讨论】:
-
你使用的是什么版本的 Rails?
-
@ThomasWalpole 我正在使用 rails 5.2.1 和 ruby 2.5.1
标签: ruby-on-rails selenium selenium-webdriver rspec capybara