2012-02-21 17 views
6

Rails 3.2.1 ứng dụng, sử dụng đá quý minitest và autotest-ray.Làm cách nào để có được đầu ra màu trong tự động bằng Kiểm tra/Đơn vị, MiniTest?

Nếu tôi chạy "kiểm tra rake", đầu ra có màu. Nhưng nếu tôi chạy autotest, đầu ra không có màu.

Làm cách nào để nhận được kết quả màu khi sử dụng tự động?

Dưới đây là test_helper.rb tôi:

ENV["RAILS_ENV"] = "test" 
require File.expand_path('../../config/environment', __FILE__) 
require 'rails/test_help' 
require 'turn/autorun' 

Turn.config do |c| 
# use one of output formats: 
# :outline - turn's original case/test outline mode [default] 
# :progress - indicates progress with progress bar 
# :dotted - test/unit's traditional dot-progress mode 
# :pretty - new pretty reporter 
# :marshal - dump output as YAML (normal run mode only) 
# :cue  - interactive testing 
c.format = :pretty 
# turn on invoke/execute tracing, enable full backtrace 
c.trace = true 
# use humanized test names (works only with :outline format) 
c.natural = true 
end 

class ActiveSupport::TestCase 
    # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order. 
    # 
    # Note: You'll currently still have to declare fixtures explicitly in integration tests 
    # -- they do not yet inherit this setting 
    fixtures :all 

    # Add more helper methods to be used by all tests here... 
end 

Trả lời

7

Nếu tôi chạy "thử nghiệm cào" đầu ra là ở màu sắc.

Điều này là do tự động thực hiện "điểm cuối" mà tiến trình thử nghiệm của bạn đang chạy không phải là tty và khi bạn chạy trực tiếp, đó là.

Thứ nhất là cách hoạt động, mã màu được xác định theo trình tự thoát, nếu bạn viết chúng xuống sẽ trông giống như một cái gì đó như \E[48mPRINT ME IN RED\E[0m (details).

Thiết bị đầu cuối của bạn hiểu được các chuỗi thoát này (thông thường), thay thế chúng bằng màu sắc, cải thiện sự xuất hiện của đầu ra.

Bằng cách sử dụng các biến môi trường được xác định bởi các giả lập thiết bị đầu cuối, và nhìn vào nó là nó là đầu vào, và dòng đầu ra (có nghĩa là $stdin, $stdout, và $stderr) processe (s) có thể xác định hỗ trợ màu sắc, và cho dù đó là kết nối với một thiết bị đầu cuối (tty) hoặc một tệp hoặc quá trình khác hoặc v.v.

Khi một quá trình bắt đầu quá trình khác, quy trình của bạn, không phải thiết bị đầu cuối là chủ sở hữu, vì vậy đầu ra test không nói chuyện với thiết bị đầu cuối hiểu lối thoát màu trình tự, nó nói chuyện với autotest, mà không.

Hành vi tương tự sẽ xảy ra, chạy thử nghiệm của bạn, nhưng chuyển hướng đầu ra sang tệp, mã thoát và chuỗi sẽ là vô nghĩa.

Mối quan hệ trông như thế này:

# rake test 
Terminal Application 
\- Bash 
    \- rake   # Rake's $stdout.tty? => true 
        # (Bash is a terminal emulator) 

# autotest 
Terminal Application 
\- Bash 
    \- autotest 
     \- rake  # Rake's $stdout.tty? => false 
         # (Autotest is not a terminal emulator) 

Có một vài cách để giả mạo sự ủng hộ, vì vậy Autotest chạy trong màu sắc, một cách documented here sẽ xuất hiện để được mạnh mẽ nhất, mà không cần phải thử nghiệm nó bản thân mình.

Một cách khác, chỉ đơn giản là để ngắn mạch nó "kiểm tra hỗ trợ màu" using this technique

Phương pháp #tty? trên suối không chỉ hữu ích cho việc trên, mà còn xem xét các trường hợp đó một chạy Ruby-debug, hoặc một số lệnh "tương tác" khác, khi quá trình kiểm soát không phải là tty, không có cách nào ruby-debug có thể nhắc người dùng, nếu nó được kết nối với ứng dụng khác, có thể không hiểu lời nhắc, vì vậy khi đầu ra luồng cho một tệp hoặc chạy một quy trình bên trong một tệp khác, phần mềm thông minh luôn kiểm tra trước, để xem liệu quy trình gốc có bị nhầm lẫn hay không bằng cách nhắc đầu vào hoặc gửi đầu ra không chuẩn.

Nếu bạn muốn thực hiện một số đọc bổ sung, hãy xem $stdin.tty? từ tài liệu Ruby, nó giải thích sự khác biệt giữa quy trình đầu vào và luồng đầu ra được coi là tty và hiệu ứng có trên thực tế.

+2

Cả hai liên kết này dường như đã chết: ( – alnorth29

+2

Bài đăng này đã quá 12 tháng! Đối với cả hai kỹ thuật được đề cập, cả hai kỹ thuật đã được ghi ở đây không hoạt động nữa, nhưng lý thuyết là âm thanh, bạn sẽ có để tìm trong mã, hoặc hỏi tác giả đá quý nếu có một cách để buộc colourisation, bỏ qua kiểm tra cho dù có hay không đầu ra là một tty. –

Các vấn đề liên quan