Ruby / Rails непрерывное автоматическое тестирование с уведомлениями и выводом html? - PullRequest
0 голосов
/ 10 октября 2011

Я новичок в ruby ​​/ rails, в настоящее время делаю учебник по железной дороге как часть университетского курса.Я использую Ubuntu 11.04, ruby ​​1.9.2p290 и Rails 3.0.9, watchr (0.7), rspec (2.6.0), rspec-formatter-webkit (2.1.3) и spork (0.9.0.rc).

На github я наткнулся на этот драгоценный камень, и я подумал, что было бы очень приятно его использовать.Итак, в основном я пытаюсь добиться непрерывного автоматизированного тестирования с уведомлениями, если оно закончено, а также для генерации из него хороших выходных данных html.

Итак, я попытался написать сценарий наблюдения:

require 'nokogiri'
require 'open-uri'

watch("spec/.*/*_spec.rb") do |match|
  run_spec match[0]
end

watch("app/(.*/.*).rb") do |match|
  run_spec %{spec/#{match[1]}_spec.rb}
end

def run_spec(file)
  unless File.exist?(file)
    puts "#{file} does not exist"
    return
  end

puts "Running #{file}"
result = `rspec -r rspec/core/formatters/webkit -f RSpec::Core::Formatters::WebKit #{file}`
File.open('out.html', 'w') do |f|
  f.puts result
end
notify(result)
puts "DONE"
end

def send_notify title, msg, img, pri='low', time=5000
  `notify-send -i #{img} -u #{pri} -t #{time} '#{msg}'`
end

def notify(result)
  output = result
  doc = Nokogiri::HTML(result)
  doc.xpath('//div[@id = "summary"]').each do |node|
    output = node.text.split.join(" ")
  end
  folder = "~/Pictures/autotest/"
  if output =~ /([123456789]|[\d]{2,})\sfailed/
    send_notify "FAIL:", "#{output}", folder+"rails_fail.png", 'critical', 20000
  elsif output =~ /[1-9]\d*\spending?/
    send_notify "PENDING:", "#{output}", folder+"rails_pending.png", 'normal', 15000
  else
    send_notify "PASS:", "#{output}", folder+"rails_ok.png"
  end
end

обработка уведомлений и генерация выходных данных во время тестирования.

Если я запускаю это с watchr, все хорошо и работает, однако тесты, конечно, занимают много времени.

Проблема возникает здесь: если я пытаюсь использовать spork, чтобы ускорить тестирование, я получаю кучу ошибок, начиная с LoadError:

Exception encountered: #<LoadError: no such file to load --  rspec/core/formatters/webkit> 
backtrace:
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:239:in `require'
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:239:in `block in require'
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:225:in `block in load_dependency'
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:596:in `new_constants_in'
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:225:in `load_dependency'
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/activesupport-3.0.9/lib/active_support/dependencies.rb:239:in `require'
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/configuration.rb:247:in `block in requires='
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/configuration.rb:247:in `map'
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/configuration.rb:247:in `requires='
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/configuration_options.rb:21:in `block in configure'
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/configuration_options.rb:20:in `each'
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/configuration_options.rb:20:in `configure'
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/rspec-core-2.6.4/lib/rspec/core/command_line.rb:17:in `run'
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/rspec-core-2.6.4/lib/rspec/monkey/spork/test_framework/rspec.rb:5:in `run_tests'
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/spork-0.9.0.rc/lib/spork/run_strategy/forking.rb:13:in `block in run'
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/spork-0.9.0.rc/lib/spork/forker.rb:21:in `block in initialize'
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/spork-0.9.0.rc/lib/spork/forker.rb:18:in `fork'
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/spork-0.9.0.rc/lib/spork/forker.rb:18:in `initialize'
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/spork-0.9.0.rc/lib/spork/run_strategy/forking.rb:9:in `new'
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/spork-0.9.0.rc/lib/spork/run_strategy/forking.rb:9:in `run'
/usr/local/ruby/lib/ruby/gems/1.9.1/gems/spork-0.9.0.rc/lib/spork/server.rb:47:in `run'
/usr/local/ruby/lib/ruby/1.9.1/drb/drb.rb:1558:in `perform_without_block'
/usr/local/ruby/lib/ruby/1.9.1/drb/drb.rb:1518:in `perform'
/usr/local/ruby/lib/ruby/1.9.1/drb/drb.rb:1592:in `block (2 levels) in main_loop'
/usr/local/ruby/lib/ruby/1.9.1/drb/drb.rb:1588:in `loop'
/usr/local/ruby/lib/ruby/1.9.1/drb/drb.rb:1588:in `block in main_loop'

, что, конечно, недействительно говорите мне что-нибудь, будучи абсолютным новичком.

Есть ли способ преодолеть это (или, конечно, получить результат любым другим способом)?

Любая помощь очень ценится:)

1 Ответ

0 голосов
/ 11 октября 2011

Возможно, вам больше повезет, если вы будете работать непосредственно с бегуном RSpec, а не с обстрелом, например,

require 'rspec/core'
require 'rspec/core/formatters/webkit'

# ...then in #run_spec
puts "Running #{file}"
File.open( 'out.html', 'w' ) do |f|
  argv = [ '-f', 'RSpec::Core::Formatters::WebKit', file ]
  RSpec::Core::Runner.run( argv, f )
end
notify(result)
puts "DONE"

Похоже, что "Kernel.require", запатентованный обезьяной ActiveSupport, отличается в трех упомянутых вами сценариях.

Если вы выясните, почему ActiveSupport не может найти библиотеку, я был бы рад попытаться обойти ее в форматере WebKit.

...