2011-10-10 3 views
0

저는 루비/레일의 초보자입니다. 현재 대학 과정의 한 부분으로 레일 스터 리얼 북을하고 있습니다.우분투 11.04, 루비 1.9.2p290, 레일즈 3.0.9, watchr (0.7), rspec (2.6.0), rspec-formatter-webkit (2.1.3) 및 spork (0.9.0.rc) .알림 및 html 출력을 통한 Ruby/Rails의 지속적인 자동 테스트?

github에서 나는 this 보석을 발견했으며, 그것을 사용하는 것이 매우 좋을 것이라고 생각했습니다. 기본적으로 내가 달성하려고하는 것은 알림이있는 경우 자동 완성 테스트를 수행하고 좋은 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 스크립트를 썼다는 것이다.

watchr을 사용하여 실행하면 모든 것이 훌륭하게 작동하지만 테스트에는 오랜 시간이 걸립니다.

문제는 여기에 온다 :

물론 정말
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' 

을 말하지 않는다 : 나는 테스트 속도를 높이기 위해, spork를 사용하려고하면, 나는 LoadError로 시작하는 오류의 무리를 얻을 수 나에게 어떤 것도, 총 초보자.

이 문제를 극복 할 수있는 방법이 있습니까?

은 어떤 도움이 크게 감사합니다 :)

+0

이 젬을 설치할 때 점진적으로 수행 했습니까? 각각의 젬이 의도 한대로 작동하는지 확인 했습니까? 징후가 rspec-formatter-webkit을 가리키고 있기 때문에 나는 묻습니다. 특히이 보석에 대한 특별 설치 지침이 있습니까? – Tass

+0

점진적으로 설치했는데 모두 제대로 작동하는 것 같습니다. rsepc-formatter gem에 대한 구체적인 지침이 없으며 gem install 만 있습니다. 그것은 텍스트 메이트와 함께 편리하게 사용할 수 있지만 그럴 필요가 없기 때문에 나는 보석 제작자에게 편지를 썼다. 그는 다음과 같이 그것을 사용할 수 있다고 대답했다 : rspec -r rspec/core/formatters/webkit -f RSpec :: Core :: Formatters :: WebKit _file_ – tpv

+0

@Tass : 명령 행에서 작동하고 watchr에서 작동하는 경우 "기호가 rspec-formatter-webkit을 가리키고 있습니다"라고하는 이유는 무엇입니까? 그 징후는 무엇입니까? –

답변

0

당신은 운이 더 예를 들어, 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" 

ActiveSupport 원숭이 (자유) '커널을 -patched. '당신이 언급 한 세 가지 시나리오에서 다른 것 같다.

ActiveSupport에서 라이브러리를 찾을 수없는 이유를 알면 WebKit 포맷터로 해결하려고 노력하게되어 기쁩니다.