2011-07-20 43 views
6

Có cách nào để làm xét nghiệm capistrano chạy đơn vị trên ứng dụng Rails của tôi khi tôi chạy cap deploy, và thất bại nếu họ không vượt qua? Tôi biết điều này có thể và nên được thực hiện bởi người triển khai, nhưng tôi muốn nó được tự động. bất kì ý kiến ​​nào đều được đánh giá cao.kiểm tra tự động chạy trên triển khai với capistrano

Cảm ơn trước!

EDIT: Tôi đã kết thúc bằng cách sử dụng this làm giải pháp.

Trả lời

4

nhiệm vụ capistrano này sẽ chạy thử nghiệm đơn vị trên máy chủ được triển khai, trong phương thức sản xuất:

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 

Tìm thấy giải pháp ở đây: http://marklunds.com/articles/one/338

: D

+0

Các giải pháp bạn đăng chạy thử nghiệm trên các máy chủ sản xuất. Tôi không nghĩ rằng đa số sẽ làm tht .. – brayne

+2

Tôi đã kết thúc việc thêm [this] (https://gist.github.com/1097695) vào tệp deploy.rb của tôi. – Ian

1

Thiết lập này sẽ chạy của bạn thử nghiệm cục bộ trước khi triển khai.

Capistrano nhiệm vụ, ví dụ lib/capistrano/nhiệm vụ/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' 

trình tại 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 

Run nó với với

cap production deploy:run_tests 
Các vấn đề liên quan