RSpec如何为助手添加元数据

时间:2017-11-13 04:59:35

标签: ruby-on-rails rspec

我想为我的rspec测试添加自定义标记。例如:

before(:suite) do
    if (it.tags[:transactional] == true) 
    else
    end
end

自定义标记为 transactional:false

然后在我的database_cleaner_helper.rb中,我可以写下面的内容。

insert into Dimension_DDTU (BI_Id, BI_Name, DBI_Id, dBI_Name)
    select
        ds.BI_ID,
        dvo.name,
        ds.BI_Id + '' + dm.DBI_Id as DBI_Id,
        dso.dname
    from 
        Census.dbo.SMaster sm
    full outer join 
        C.dbo.dis dso on dso.did = sm.did
    full outer join  
        C.dbo.Div dvo on dvo.dsid = dso.diid
    full outer join 
        b.dbo.DMap ds on ds.DOp_Id = dso.did
    full outer join 
        b.dbo.DsMap dm on dm.DOp_Id = sm.did

你能举个例子吗?

2 个答案:

答案 0 :(得分:0)

正确的语法就像

before(:suite, transactional: true) do
  # do something
end

请参阅https://relishapp.com/rspec/rspec-core/docs/hooks/filters

答案 1 :(得分:0)

我想出了我自己的解决方案,如下所示。由于我在运行任何测试之前使用数据库清理程序来截断数据库,因此rspec元数据仅适用于每个测试;我必须使用环境变量来控制它。结果如下所示。

database_cleaner = ENV['DATABASE_CLEANER']

RSpec.configure do |config|

  config.before(:suite) do 
      if database_cleaner.nil? || database_cleaner == 'true'
          DatabaseCleaner.clean_with(:truncation)
          Rails.application.load_seed
      end
  end

  # More code here
end

另外要指出这一点,你不能做config.before(:suite, transactional: true)。从rspec-rails 3.6.0

开始,它不可用