【问题标题】:Clear database after testing a rake task using RSpec使用 RSpec 测试 rake 任务后清除数据库
【发布时间】:2014-04-30 16:49:30
【问题描述】:

我正在尝试使用 rspec 测试我的 rake 任务,它运行良好,但问题是之后没有删除记录。

我已将config.use_transactional_fixtures = true 放在配置文件中,没有影响。在其他测试中它运行良好。

这是我的代码:

require 'rspec'
require 'spec_helper'
require 'rake'

describe 'my_app rake tasks'  do
    describe 'rake_task_1' do
        before { MyApp::Application.load_tasks }

        it 'should test it!' do
            10.times { create(:record) }
            Rake::Task["rake_task_1"].invoke
            Record.count.should == 10
        end
    end
end

在我的 rake 任务中,我正在使用 ActiveRecord::Base.connection.execute 执行查询。 我确定它在 RSepc 中有一些与 SQL 转换有关的东西......

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails ruby rspec factory-bot


    【解决方案1】:

    您是否尝试过使用database_cleaner gem?

    你可以查看great article by Avdi Grimm关于如何配置它。

    config.use_transactional_fixtures = false
    

    在文件spec/support/database_cleaner.rb

    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
    

    【讨论】:

    • 谢谢!我在那个特定文件中使用了after(:each) { DatabaseCleaner.strategy = :truncation; DatabaseCleaner.clean }
    猜你喜欢
    • 2015-12-29
    • 1970-01-01
    • 2014-09-06
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多