2008-10-01 32 views
25

Tôi đang có một thử nghiệm treo trong ứng dụng đường ray của chúng tôi không thể tìm ra cái nào (vì nó bị treo và không nhận được báo cáo thất bại). Tôi tìm thấy bài đăng trên blog này http://bmorearty.wordpress.com/2008/06/18/find-tests-more-easily-in-your-testlog/ thêm một móc cài đặt để in tên thử nhưng khi tôi cố gắng làm điều tương tự, nó cho tôi lỗi khi nói sai số đối số để thiết lập (1 cho 0). Bất kì sự giúp đỡ nào cũng được hoan nghênh.Kiểm tra đường ray treo - làm thế nào tôi có thể in tên thử nghiệm trước khi thực hiện?

Trả lời

38

Nếu bạn chạy thử nghiệm sử dụng cào nó sẽ làm việc:

rake test:units TESTOPTS="-v" 
0

Bạn đang sử dụng khung kiểm tra nào? Kiểm tra/Đơn vị?

Tôi sẽ xem xét RSpec sẽ cung cấp thêm một chút ngữ cảnh cho các thử nghiệm của bạn. Bạn cũng có thể nhận được một báo cáo HTML đẹp trông như thế này:

RSpec Result http://myskitch.com/robbyrussell/rspec_results-20070801-233809.jpg

Đã bạn có bất kỳ thử nghiệm thất bại, các thử nghiệm cụ thể sẽ là màu đỏ và nó sẽ mở rộng tới các dòng cụ thể nơi thử nghiệm thất bại trong việc cung cấp cho bạn nhiều khả năng hiển thị hơn về lý do tại sao thử nghiệm không thành công và nơi bạn nên xem xét để giải quyết vấn đề.

+2

Xét nghiệm này được treo, không thất bại, vì vậy câu trả lời này là không thích hợp. –

3

Định nghĩa trong bài đăng blog là cụ thể (phương pháp thiết lập (& khối) được định nghĩa trong mô-đun Thoughtbot :: Shoulda trong ngữ cảnh.rb. Shoulda.rb sau đó có TestCase mở rộng mô-đun đó).

Định nghĩa cho kiểm tra tinh khiết :: đơn vị là

# File test/unit/testcase.rb, line 100 
     def setup 
     end 

những gì bạn có thể làm là

def setup 
    log_test 
end 

private 

def log_test 
    if Rails::logger 
    # When I run tests in rake or autotest I see the same log message multiple times per test for some reason. 
    # This guard prevents that. 
    unless @already_logged_this_test 
    Rails::logger.info "\n\nStarting #{@method_name}\n#{'-' * (9 + @method_name.length)}\n" 
    end 
    @already_logged_this_test = true 
end 

chỉnh sửa

nếu bạn thực sự không muốn chỉnh sửa của bạn các tệp bạn có thể gặp rủi ro khi mở lại trường hợp thử nghiệm và mở rộng chạy thay thế:

class Test::Unit::TestCase 
    alias :old_run :run 
    def run 
    log_test 
    old_run 
    end 
end 

này nên làm việc (tôi không có ruby ​​xung quanh để kiểm tra mặc dù)


tôi bỏ cuộc! (trong thất vọng)

Tôi đã kiểm tra mã và đường ray thực sự làm ảo thuật đằng sau cảnh có thể là lý do tại sao việc xác định lại lần chạy không hoạt động.

Điều này là: một phần của ma thuật bao gồm ActiveSupport :: CallBack và tạo cuộc gọi lại để thiết lập và rách.

có nghĩa

class Test::Unit::TestCase 
    setup :log_test 

    private 

    def log_test 
    if Rails::logger 
     # When I run tests in rake or autotest I see the same log message multiple times per test for some reason. 
     # This guard prevents that. 
     unless @already_logged_this_test 
     Rails::logger.info "\n\nStarting #{@method_name}\n#{'-' * (9 + @method_name.length)}\n" 
     end 
     @already_logged_this_test = true 
    end 
    end 
end 

chắc chắn nên làm việc

và thực sự chạy thử nghiệm với nó làm việc. nơi tôi bối rối là đây là điều đầu tiên tôi thử và thất bại với cùng một lỗi mà bạn nhận được

+0

một đồng xu cho công sức. – nurettin

6

Việc in tên thử nghiệm là trách nhiệm của TestRunner. Nếu bạn đang chạy thử nghiệm của bạn từ dòng lệnh, bạn có thể chỉ định tùy chọn -v, để in ra tên trường hợp thử nghiệm.

dụ:

ruby test_Foo.rb -v 
Loaded suite test_Foo 
Started 
test_blah(TestFoo): . 
test_blee(TestFoo): . 

Finished in 0.007 seconds. 

2 tests, 15 assertions, 0 failures, 0 errors 
+0

Có cách nào tương tự để thực hiện điều này từ nhiệm vụ kiểm tra rake của Rails không? – nertzy

+0

kiểm tra cào: đơn vị TESTOPTS = "- v" – allenwei

4

Đây là những gì tôi sử dụng, trong test_helper.rb

class Test::Unit::TestCase 
    # ... 

    def setup_with_naming 
    unless @@named[self.class.name] 
     puts "\n#{self.class.name} " 
     @@named[self.class.name] = true 
    end 
    setup_without_naming 
    end 
    alias_method_chain :setup, :naming unless defined? @@aliased 
    @@aliased = true 
end 

Các @@ biến aliased giữ nó khỏi bị tái aliased khi bạn chạy nó trên nhiều file cùng Một lần; @@ được đặt tên giữ tên hiển thị trước mỗi lần kiểm tra (ngay trước lần chạy đầu tiên).

0

Cảm ơn tất cả mọi người đã giúp đỡ, tôi đã kết thúc trải qua các cuộc thử nghiệm và thêm một cuộc gọi đến log_name trong mỗi phương pháp thiết lập cho mỗi tập tin thử nghiệm trước khi những cặp đôi câu trả lời cuối cùng đã đưa ra. Cảm ơn một lần nữa.

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