我的项目中有这种情况 - 我有一个代表测试期间使用的浏览器的 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
有了这个 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
但这并没有按预期工作 - RSpec 运行程序实例化它自己的单例对象实例,而 close_browser 任务没有看到。因此,当 close_browser 任务被安排时,另一个浏览器实例被实例化并立即关闭,但在测试期间使用的浏览器实例保持打开状态。在所有 RSpec 测试运行浏览器关闭后,我该如何实现?我想这必须通过 RSpec 全局挂钩的一些配置来完成?有人会给我举一个这样的钩子的例子吗?谢谢!