DatabaseCleaner不使用Capybara自动化测试

时间:2016-06-09 22:49:03

标签: mysql ruby-on-rails ruby rspec database-cleaner

我在使用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。

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中的“常规日志”,查看哪些查询,如果正在执行任何。幸运的话,这将为您提供线索,了解测试线束的哪一部分可以盯着。