我在使用MySQL运行的Rails站点上使用Capybara和Poltergeist运行自动化测试。
我在运行这个自动套件时会看到它提交“数据”插件的位置,但是DatabaseCleaner似乎什么也没做,在运行它时我没有遇到任何错误。
(我确保也安装了宝石)。这是我第一次使用DatabaseCleaner,但似乎没有任何工作。
rails_helper文件的相关部分:
dword ptr [ax]
另外,我确定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
。
我的test_helper.rb文件也不花哨:
config.use_transactional_fixtures = false
最后是一个示例脚本,它基本上通过本地运行的Rails网站创建一个记录。这很简单,但我只是以此为例。自动化测试都可以做到。
#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
我在这里遗漏了什么吗?运行时我没有收到任何错误,但数据不会被删除。
我正在运行MySQL 5.6.26和Rails 4.0.2。
答案 0 :(得分:2)
默认情况下,database_cleaner将清除正在运行测试的应用程序的测试数据库。如果集成规范中的请求是针对其他应用程序的,而不是针对此测试数据库运行,那么它将对该其他数据库无效(它甚至不知道它存在)。
您可以为数据库清理额外的数据库进行清理。如果您的database.yml使用密钥:integration
列出了此其他数据库的详细信息,即它包含类似
integration:
adapter: mysql
database: some_db
...
然后你可以使用
DatabaseCleaner[:active_record, { :connection => :integration }].strategy = :truncation
指定在调用DatabaseCleaner.clean
时也应截断此数据库。这当然会在每次测试运行时从该数据库中删除所有。
答案 1 :(得分:1)
调试提示:打开MySQL中的“常规日志”,查看哪些查询,如果正在执行任何。幸运的话,这将为您提供线索,了解测试线束的哪一部分可以盯着。