2011-07-20 22 views
6

Czy istnieje sposób na przeprowadzenie testów jednostkowych Capistrano na mojej aplikacji Railsowej, gdy uruchamiam cap deploy, i nie uda się, jeśli nie przejdą? Wiem, że to może i powinien zrobić zastępca, ale chciałbym, żeby był automatyczny. Wszelkie pomysły będą mile widziane.Automatyczne uruchamianie testów przy użyciu capistrano

Z góry dziękuję!

EDYCJA: Skończyłem jako rozwiązanie przy użyciu this.

Odpowiedz

4

Zadanie capistrano będzie uruchomić testy jednostkowe na serwerze wdrażane w trybie produkcyjnym:

desc "Run the full tests on the deployed app." 
task :run_tests do 
run "cd #{release_path} && RAILS_ENV=production rake && cat /dev/null > log/test.log" 
end 

znaleźć rozwiązanie tutaj: http://marklunds.com/articles/one/338

: D

+0

rozwiązanie, którego pisał przebiega test na serwerze produkcyjnym. Nie sądzę, by większość działała w ten sposób. – brayne

+2

Skończyło się na dodaniu [this] (https://gist.github.com/1097695) do mojego pliku deploy.rb. – Ian

1

Taka konfiguracja będzie uruchomić testy lokalne przed wdrożeniem.

Zadanie Capistrano, np. lib/capistrano/zadania/deploy.rake

namespace :deploy do 
    desc 'Run test suite before deployment' 
    task :test_suite do 
    run_locally do 
     execute :rake, 'test' 
    end 
    end 
end 

Capistrano config,config/deploy.rb

before 'deploy:starting', 'deploy:test_suite' 

Pracuje w Capistrano v3.x

0

config/deploy.rb

# Path of tests to be run, use array with empty string to run all tests 
set :tests, [''] 

namespace :deploy do 
    desc "Runs test before deploying, can't deploy unless they pass" 
    task :run_tests do 
    test_log = "log/capistrano.test.log" 
    tests = fetch(:tests) 
    tests.each do |test| 
     puts "--> Running tests: '#{test}', please wait ..." 
     unless system "bundle exec rspeC#{test} > #{test_log} 2>&1" 
     puts "--> Aborting deployment! One or more tests in '#{test}' failed. Results in: #{test_log}" 
     exit; 
     end 
     puts "--> '#{test}' passed" 
    end 
    puts "--> All tests passed, continuing deployment" 
    system "rm #{test_log}" 
    end 

    # Only allow a deploy with passing tests to be deployed 
    before :deploy, "deploy:run_tests" 

end 

Uruchom go z

cap production deploy:run_tests 
Powiązane problemy