我在我的项目中有这种情况 - 我有一个Singleton类代表测试期间使用的浏览器:
class Browser
include Singleton
def initialize
@browser = Watir::Browser.new :ff
end
def goto url
@browser.goto url
end
def close
@browser.close
end
end
Run Code Online (Sandbox Code Playgroud)
使用这个rakefile,我想确保在测试完成后浏览器关闭:
desc "default test task"
task :test_all do
Rake::Task[:all_rspec_tests].invoke
Rake::Task[:close_browser].invoke
end
desc "runs all rspec tests"
RSpec::Core::RakeTask.new(:all_rspec_tests) do |t|
# run all rspec tests according to pattern for filename
# tests make use of Singleton class representing browser
end
desc "closes browser used during tests"
task :close_browser do
Browser.instance.close
end
Run Code Online (Sandbox Code Playgroud)
但这并不像预期的那样工作 - RSpec runner实例化它自己的singleton对象实例,close_browser任务没有看到它.因此,当close_browser任务被调度时,另一个浏览器实例被实例化并立即关闭,但测试期间使用的实例仍保持打开状态.在所有RSpec测试运行后,我怎样才能实现浏览器关闭?我想这必须通过RSpec全局钩子的一些配置来完成?有人会指出我这样的钩子的例子吗?谢谢!
我正在对一个 Web 应用程序进行建模,您可以通过单击某个链接来访问另一个应用程序页面。我决定做这样的事情:
文件C:/Sandbox/common_page.rb:
require_relative "./pageA"
require_relative "./pageB"
require_relative "./pageC"
require_relative "./pageD"
class CommonPage
def pageA
# click_pageA_link
pageA.new
end
def pageB
# click_pageB_link
pageB.new
end
def pageC
# click_pageC_link
pageC.new
end
def pageD
# click_pageD_link
pageD.new
end
# and so on for other pages..
end
Run Code Online (Sandbox Code Playgroud)
文件C:/Sandbox/pageA.rb:
require_relative "./common_page"
class PageA < CommonPage
def pageA
self
end
end
Run Code Online (Sandbox Code Playgroud)
文件C:/Sandbox/pageB.rb:
require_relative "./common_page"
class PageB < CommonPage
def pageB
self
end
end
Run Code Online (Sandbox Code Playgroud)
对于表示其他页面的类,将提供类似的代码。如果我C:/Sandbox/test.rb使用以下代码运行文件:
require_relative …Run Code Online (Sandbox Code Playgroud)