在所有测试完成后,使用哪个RSpec钩子执行清理任务?

2026-04-11 17:012阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计486个文字,预计阅读时间需要2分钟。

在所有测试完成后,使用哪个RSpec钩子执行清理任务?

我在我的项目中遇到了这种情况——我有一个用于测试期使用的Singleton类浏览器:`class Browser include Singleton def initialize @browser=Watir::Browser.new end def goto url @browser.goto url end def close @browser.close end end`

我在我的项目中有这种情况 – 我有一个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

使用这个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 runner实例化它自己的singleton对象实例,close_browser任务没有看到它.因此,当close_browser任务被调度时,另一个浏览器实例被实例化并立即关闭,但测试期间使用的实例仍保持打开状态.在所有RSpec测试运行后,我怎样才能实现浏览器关闭?我想这必须通过RSpec全局钩子的一些配置来完成?有人会指出我这样的钩子的例子吗?谢谢!

你不想在Rake任务中做这些事情.如果您只想在开始时启动一个浏览器实例并持续执行所有测试,则可以使用before:suite挂钩在spec / spec_helper.rb中执行此操作.就像是:

RSpec.configure do |config| # (other RSpec config) config.before(:suite) do Browser.initialize # or whatever end config.after(:suite) do Browser.close end end

这将在开始时启动浏览器一次并在结束时关闭它.您更可能只想在某些测试文件或测试集合之前和之后使用钩子.从RSpec docs开始.

您可能要考虑使用Capybara而不是Watir;它与RSpec很好地集成,你不必手动完成这些工作.还有watir-rspec,但我自己从未使用过它.无论如何,这是一个解决的问题.找到帮助你的东西比自己设置更容易.

本文共计486个文字,预计阅读时间需要2分钟。

在所有测试完成后,使用哪个RSpec钩子执行清理任务?

我在我的项目中遇到了这种情况——我有一个用于测试期使用的Singleton类浏览器:`class Browser include Singleton def initialize @browser=Watir::Browser.new end def goto url @browser.goto url end def close @browser.close end end`

我在我的项目中有这种情况 – 我有一个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

使用这个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 runner实例化它自己的singleton对象实例,close_browser任务没有看到它.因此,当close_browser任务被调度时,另一个浏览器实例被实例化并立即关闭,但测试期间使用的实例仍保持打开状态.在所有RSpec测试运行后,我怎样才能实现浏览器关闭?我想这必须通过RSpec全局钩子的一些配置来完成?有人会指出我这样的钩子的例子吗?谢谢!

你不想在Rake任务中做这些事情.如果您只想在开始时启动一个浏览器实例并持续执行所有测试,则可以使用before:suite挂钩在spec / spec_helper.rb中执行此操作.就像是:

RSpec.configure do |config| # (other RSpec config) config.before(:suite) do Browser.initialize # or whatever end config.after(:suite) do Browser.close end end

这将在开始时启动浏览器一次并在结束时关闭它.您更可能只想在某些测试文件或测试集合之前和之后使用钩子.从RSpec docs开始.

您可能要考虑使用Capybara而不是Watir;它与RSpec很好地集成,你不必手动完成这些工作.还有watir-rspec,但我自己从未使用过它.无论如何,这是一个解决的问题.找到帮助你的东西比自己设置更容易.