DatabaseCleaner 不适用于 Capybara 自动化测试
DatabaseCleaner not working with Capybara automated tests
我正在运行使用 Capybara 和 Poltergeist 在 Rails 网站上 运行 进行自动化测试 MySQL。
我看到它在 运行 宁此自动化套件时提交 "data" 插入,但 DatabaseCleaner 似乎什么都不做,当 运行宁它时我也没有收到任何错误。
(我确保也安装了 gems)。这是我第一次 运行 使用 DatabaseCleaner,但似乎没有任何效果。
rails_helper 文件的相关部分:
RSpec.configure do |config|
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, :js => true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
此外,我确定 config.use_transactional_fixtures = false
。
我的 test_helper.rb 文件也没什么特别的:
#Load up Capybara/Rspec
require 'rails_helper'
require 'rspec'
require 'capybara/rspec'
require 'capybara'
require 'capybara/dsl'
#Load up Poltergeist
require 'capybara/poltergeist'
#Set JS Supported Driver
Capybara.javascript_driver = :poltergeist
最后是一个示例脚本,它基本上通过本地 运行 Rails 网站并创建记录。这很简单,但我只是以此为例。自动化测试各司其职。
require 'test_helper'
describe "Test", :type => :feature, :js => true do
it 'Add Widget' do
visit ('/')
fill_in('user_email', :with => 'test@test.com')
fill_in('user_password', :with => 'p@ssword')
click_button('Log in')
click_link('Tools')
expect(page).to have_content 'Tools'
click_link('Stuff')
expect(page).to have_content 'Stuff'
click_link('Create New Thingy')
expect(page).to have_content 'New Thingy'
fill_in('thingy_name', :with => 'Name for a Thing!')
click_button('Create Thing!')
end
end
我是不是漏掉了什么? 运行ning 时我没有收到任何错误,但数据并没有被删除。
我 运行宁 MySQL 5.6.26 和 Rails 4.0.2.
调试提示:打开 MySQL 中的 "general log" 查看正在执行的查询,如果有。运气好的话,这会给你一个线索,让你知道要盯着测试工具的哪一部分。
默认情况下,database_cleaner 将清理其测试正在 运行 的应用程序的测试数据库。如果您的集成规范中的请求将转到其他应用程序,而不是针对此测试数据库 运行,那么它不会对该其他数据库执行任何操作(它甚至不知道它的存在)。
您可以为数据库清理器提供额外的数据库以进行清理。如果您的 database.yml 使用键 :integration
列出了其他数据库的详细信息,即它包含类似
的内容
integration:
adapter: mysql
database: some_db
...
那么你可以使用
DatabaseCleaner[:active_record, { :connection => :integration }].strategy = :truncation
指定此数据库在调用 DatabaseCleaner.clean
时也应 运行 分类。这当然会在每次测试 运行.
时从该数据库中删除 所有内容
我正在运行使用 Capybara 和 Poltergeist 在 Rails 网站上 运行 进行自动化测试 MySQL。
我看到它在 运行 宁此自动化套件时提交 "data" 插入,但 DatabaseCleaner 似乎什么都不做,当 运行宁它时我也没有收到任何错误。
(我确保也安装了 gems)。这是我第一次 运行 使用 DatabaseCleaner,但似乎没有任何效果。
rails_helper 文件的相关部分:
RSpec.configure do |config|
config.before(:suite) do
DatabaseCleaner.clean_with(:truncation)
end
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.before(:each, :js => true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:each) do
DatabaseCleaner.start
end
config.after(:each) do
DatabaseCleaner.clean
end
end
此外,我确定 config.use_transactional_fixtures = false
。
我的 test_helper.rb 文件也没什么特别的:
#Load up Capybara/Rspec
require 'rails_helper'
require 'rspec'
require 'capybara/rspec'
require 'capybara'
require 'capybara/dsl'
#Load up Poltergeist
require 'capybara/poltergeist'
#Set JS Supported Driver
Capybara.javascript_driver = :poltergeist
最后是一个示例脚本,它基本上通过本地 运行 Rails 网站并创建记录。这很简单,但我只是以此为例。自动化测试各司其职。
require 'test_helper'
describe "Test", :type => :feature, :js => true do
it 'Add Widget' do
visit ('/')
fill_in('user_email', :with => 'test@test.com')
fill_in('user_password', :with => 'p@ssword')
click_button('Log in')
click_link('Tools')
expect(page).to have_content 'Tools'
click_link('Stuff')
expect(page).to have_content 'Stuff'
click_link('Create New Thingy')
expect(page).to have_content 'New Thingy'
fill_in('thingy_name', :with => 'Name for a Thing!')
click_button('Create Thing!')
end
end
我是不是漏掉了什么? 运行ning 时我没有收到任何错误,但数据并没有被删除。
我 运行宁 MySQL 5.6.26 和 Rails 4.0.2.
调试提示:打开 MySQL 中的 "general log" 查看正在执行的查询,如果有。运气好的话,这会给你一个线索,让你知道要盯着测试工具的哪一部分。
默认情况下,database_cleaner 将清理其测试正在 运行 的应用程序的测试数据库。如果您的集成规范中的请求将转到其他应用程序,而不是针对此测试数据库 运行,那么它不会对该其他数据库执行任何操作(它甚至不知道它的存在)。
您可以为数据库清理器提供额外的数据库以进行清理。如果您的 database.yml 使用键 :integration
列出了其他数据库的详细信息,即它包含类似
integration:
adapter: mysql
database: some_db
...
那么你可以使用
DatabaseCleaner[:active_record, { :connection => :integration }].strategy = :truncation
指定此数据库在调用 DatabaseCleaner.clean
时也应 运行 分类。这当然会在每次测试 运行.