我是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
答案 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?通常,您不必使用自己的方法来创建可重用的模块。