2013-03-27 33 views
10

Tôi có một gói cabal mà tôi có một test-suite thiết lập bằng các loại exitcode-stdio-1.0, như vậy:test cabal không in ra thực thi

Khi tôi chạy nó bằng cách sử cabal test, cabal không in đầu ra tiêu chuẩn/lỗi chuẩn của tệp thực thi; nó chỉ in thông tin đăng nhập riêng của mình:

$ cabal test 

Running 1 test suites... 
Test suite test-foo: RUNNING... 
Test suite test-foo: PASS 
Test suite logged to: dist/test/foo-0.0.1-test-foo.log 
1 of 1 test suites (1 of 1 test cases) passed. 
$ 

Kết quả mà tôi muốn là ở chỗ log file:

$ cat dist/test/foo-0.0.1-test-fo.log 
Test suite test-foo: RUNNING... 
HUnit group 1: 
    Expected connect: [OK] 

     Test Cases Total  
Passed 1   1   
Failed 0   0   
Total 1   1   
Test suite test-foo: PASS 
Test suite logged to: dist/test/foo-0.0.1-test-foo.log 
$ 

Làm thế nào để tôi nhận được cabal để in sản lượng này để đầu ra tiêu chuẩn riêng của mình? Tôi không thể tìm thấy nó trong tài liệu.

+0

Cảm ơn bạn đã đăng bài này.Tôi đã có thể nghĩ rằng chỉ đạo đầu ra tiêu chuẩn sẽ là trường hợp sử dụng phổ biến nhất. – sdasdadas

Trả lời

10

Dưới đây là một cách: tuy nhiên

$ cabal test --log=/dev/stdout 

Lưu ý, rằng đây không phải là một giải pháp hoàn chỉnh, vì Cabal sẽ đệm toàn bộ đầu ra và hiển thị nó chỉ một lần các chương trình thử nghiệm đã kết thúc.

các phiên bản gần đây Cabal cho phép đầu ra để được xem trực tiếp:

$ cabal test --show-details=streaming 

--show-chi tiết = lọc

Xác định nếu kết quả của trường hợp thử nghiệm cá nhân được hiển thị trên thiết bị đầu cuối . Có thể luôn (luôn hiển thị), bao giờ (không bao giờ hiển thị), thất bại (chỉ hiển thị kết quả thất bại), hoặc luồng (hiển thị tất cả kết quả trong thời gian thực).

Đọc thêm trong Cabal User Guide.

+0

Đủ tốt cho tôi! – jameshfisher

0

Khi sử dụng exitcode-stdio-1.0 cabal sẽ chỉ báo cáo nhật ký kiểm tra nếu chương trình thử nghiệm trả lại mã thoát (explictly "failed"). Một giải pháp sẽ được thực hiện chương trình thử nghiệm của bạn trả lại mã lỗi khi bất kỳ của các cuộc thử nghiệm thất bại:

import System.Exit (exitFailure, exitSuccess) 

main :: IO() 
main = do 
    result <- runTests 
    if result 
    then exitSuccess 
    else exitFailure 

runTests :: IO Bool 
runTests = do 
    ... 
    return True/False 

Bạn chỉ cần điều đó khi viết một "bằng tay" chương trình thử nghiệm: hầu hết các khuôn khổ báo cáo thử nghiệm (ví dụ: tasty, test-framework , hspec) đã tự động thực hiện điều đó.

Nếu bạn thực sự muốn luôn xem kết quả, bạn luôn có thể sử dụng một trong hai:

  • cabal test --log=/dev/stdout (được đưa ra trong câu trả lời khác)
  • exitFailure vào cuối thực hiện
4

Đã có một cách mới trong một vài tháng và kết quả kiểm tra thậm chí được ghi ra để xuất bản trên tệp, không bị xóa sổ ở cuối

cabal test --show-details=streaming 
Các vấn đề liên quan