0

我在运行 MySQL 的 Rails 站点上使用 Capybara 和 Poltergeist 运行自动化测试。

我在运行这个自动化套件时看到它在哪里提交“数据”插入,但是 DatabaseCleaner 似乎什么也没做,运行它时我也没有收到任何错误。

(我确保也安装了 gem)。这是我第一次使用 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

我在这里错过了什么吗?运行时我没有收到任何错误,但数据不会被删除。

我正在运行 MySQL 5.6.26 和 Rails 4.0.2。

4

2 回答 2

2

默认情况下,database_cleaner 将为正在运行测试的应用程序清理测试数据库。如果您的集成规范中的请求将发送到其他应用程序,而不是针对此测试数据库运行,那么它将对其他数据库无任何作用(它甚至不知道它存在)。

您可以为数据库清理器提供额外的数据库来清理。如果您的 database.yml 使用密钥列出了此其他数据库的详细信息:integration,即它包含类似

integration:
  adapter: mysql
  database: some_db
  ...

然后你可以使用

DatabaseCleaner[:active_record, { :connection => :integration }].strategy = :truncation

指定调用时也应截断此数据库 DatabaseCleaner.clean。这当然会在每次测试运行时从该数据库中删除所有内容。

于 2016-06-15T14:56:58.203 回答
1

调试提示:打开 MySQL 中的“常规日志”以查看正在执行的查询(如果有的话)。运气好的话,这会给你一个线索,让你知道要盯着测试工具的哪一部分。

于 2016-06-14T07:30:36.067 回答