rspec中可重用挂钩的最佳实践

时间:2014-06-16 13:59:36

标签: ruby-on-rails ruby rspec

我是rspec的新手,我们正在将它用于我们应用程序的测试自动化。我有三个钩子,可以在每个rspec测试中重复使用。钩子叫一个数字模块,发射用于启动&登录该站点以及其他一些可用的方法。

我创建了一个hooks.rb文件并将那些钩子放在那里并在rspec测试中调用它,但现在我已经失去了调用与我需要的方法相关的实例变量的能力。我可以对这些变量进行全球化,但我认为这样做并不是一个好主意。

有没有人对最佳方法有什么了解?

我包含代码示例。

before(:all) do
   < this before hook include making files available and initialization browser >
   ** very section
end

after(:all) do
   @client.quit
end

before(:each) do
  @page.goto
end

**我必须在每个spec文件中包含它,并且不希望这样。一次调用该位置,以便包含在任何规范中。

谢谢,

所以,我的spec_helper.rb包含以下信息:

RSpec.configure do |config|
  config.before(:all) do
        require_relative '../../lib/env'
        filedir = File.expand_path('../../etc',File.dirname(__FILE__))
        config = Matr::Configuration.new("#{filedir}/config.yaml", ENV["M_ENV"] || "development")
        @client = config.construct_selenium_driver "Insight: Login"
        @client.window.resize_to(1280,720)
        @page = Matr::Pages::Insight::LoginPage.new(@client)
        @account_page = Matr::Pages::Insight::InsightPage.new(@client)
        @choose_account = Matr::Pages::Insight::ChooseAccount.new(@client)
        @logout = Matr::Pages::Insight::LogOut.new(@client)
        @nav_bar = Matr::Pages::Insight::NavBar.new(@client)
        @db = Matr::Models::DB.new
        @manage_campaigns = Matr::Pages::Insight::ManageCampaignsPage.new(@client)
   end
end

2 个答案:

答案 0 :(得分:1)

在spec_helper.rb

中配置rspec时,可以为所有示例定义挂钩

例如你可以做

RSpec.configure do |config|
  config.before(:all) do
    ...
  end
end 

如果您对所有规格实际上并不需要,那么您可以使用rspec的元数据过滤器。例如,要应用于您要执行的所有请求规范

config.before(:all, type: :request) do
  ...
end

仅针对带有type:request的规范运行。您也可以组成自己的元数据键,所以如果你这样做了

config.before(:all, browser: true) do
  ...
end

那之前(:all)将运行以这种方式创建的组:

describe "something", browser: true do
...
end

答案 1 :(得分:0)

您是否考虑过使用shared examples?通常,您不必使用自己的方法来创建可重用的模块。