【问题标题】:Passing argument to a rspec test example将参数传递给 rspec 测试示例
【发布时间】:2016-05-18 09:34:15
【问题描述】:

我有一些使用大型测试数据库的测试。我还在每次测试后使用 Database Cleaner 来清理数据库。问题来了。 在我的规范助手中,我有这个

config.around(:each) do |example|
  MongoLib.new(database: "#{Rails.env}_sensor_data").drop_tables!
  DatabaseCleaner.cleaning do
    example.run
  end
end

但是,问题来了。提到的一组测试(一个大组)一遍又一遍地生成和删除这个大数据库(每个测试一次)。这需要很长时间,而且那些测试根本不会改变数据库,所以我真的不想每次都清理和创建数据库。

那么,有没有办法做这样的事情:

it 'something', argument do
  #testing
end

所以在规范助手中我可以做这样的事情:

config.around(:each) do |example|
MongoLib.new(database: "#{Rails.env}_sensor_data").drop_tables!
  if example.argument?
    DatabaseCleaner.cleaning do
      example.run
    end
  end
end

或者该问题是否有其他解决方案?有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    你的想法是对的。 around 钩子中的每个 example 对象都有返回哈希的 metadata 方法。因此,您可以标记要在其上运行清洁器的测试,并在钩子中查找该标记。像这样的:

    it "does something", :db_clean do
      # ...
    end
    
    config.around(:each) do |example|
      if example.metadata[:db_clean]
        # ...
      else
        # ...
      end
    end
    

    您可以了解有关这些过滤器的更多信息here

    【讨论】:

    • 正是我需要的,正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    相关资源
    最近更新 更多