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
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"
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 đề.
Đị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
một đồng xu cho công sức. – nurettin
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
Đâ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).
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.
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. –