是否有可能在`之前'添加一个`before(:each)`钩子,以便所有spec文件都可以运行它?

Bac*_*cko 12 ruby hook rspec ruby-on-rails ruby-on-rails-3

我正在使用Ruby on Rails 3.2.2和rspec-rails-2.8.1.为了使我的规范文件DRY(不要重复自己)和种子test数据库,我想before(:each)为所有这些规范文件运行一个钩子.也就是说,在我的所有spec文件中,我有以下代码:

describe 'test description' do
  before(:each) do
    load "#{Rails.root}/db/seeds.rb"
  end

  ...
end
Run Code Online (Sandbox Code Playgroud)

是否可以添加before(:each)钩子的"某处",以便所有规范文件都可以运行它? 你有什么建议?

apn*_*ing 27

spec_helper.rb:

RSpec.configure do |config|

  #your other config

  config.before(:each) do
    #your code here
  end
end
Run Code Online (Sandbox Code Playgroud)

有很多配置可用.例如:config.before(:each, :type => [:routing, :controller, :request])

您甚至可以创建自己的标签并将代码与其关联:

config.around :each, unobstrusive: true do |example|
  Capybara.current_driver = :rack_test 
  example.run
  Capybara.current_driver = :selenium
end
Run Code Online (Sandbox Code Playgroud)


Fre*_*ung 5

您可以在Rspec.configure块中添加之前/之后挂钩,通常在您的spec_helper中:

RSpec.configure do |config|
  config.before(:each) do
    ...
  end
end
Run Code Online (Sandbox Code Playgroud)