我這種情況在我的項目 - 我有測試期間使用的Singleton類代表的瀏覽器:在所有測試完成後,應使用哪些RSpec鉤子執行清理任務?
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
有了這個Rake文件我想,以確保瀏覽器被關閉,當測試完成:
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 runner實例化了它自己的singleton對象實例,close_browser任務看不到。因此,當close_browser任務被調度時,另一個瀏覽器實例將被實例化並立即關閉,但在測試期間使用的那個仍保持打開狀態。我怎麼才能做到這一點,畢竟RSpec測試已經跑了瀏覽器關閉??我想這必須做一些RSpec全局鉤子的配置?有人會指出我有這樣的鉤子的例子嗎?謝謝!
謝謝吉姆,解決了它!如果其他人發現這個有用的,這裏是一個簡短的說明 - 你必須添加這行到你的rspec測試:'require'spec_helper'' – tom 2013-04-10 08:12:51