2015-07-21 13 views
8

Có thể gọi trình gỡ lỗi trong RStudio khi chạy thử nghiệm testthat không? Tôi đã không thể tìm thấy một thiết lập cho phép điều này (các kết hợp khác nhau của "sử dụng devtools chức năng gói nếu có" trong cài đặt, nhấn tùy chọn "Gói thử nghiệm" trong menu "Xây dựng -> Khác", chạy test() trong giao diện điều khiển, đặt trong số browser() cuộc gọi, v.v.) nhưng chưa tìm được cách nào.Gỡ lỗi các thử nghiệm 'testthat' trong RStudio

Tôi cũng thấy mình bị mất rất nhiều khi thử nghiệm, chắc liệu mã được chạy đã được cài đặt trong các thư viện hệ thống (bằng cách làm 'Xây dựng & Nạp lại'), hoặc đang được chạy tại chỗ từ địa phương R thư mục, hoặc những gì - đôi khi RStudio phàn nàn rằng một breakpoint không thể được thiết lập cho đến khi gói được xây dựng lại (vì vậy tôi nghi ngờ trước đây) hoặc không (vì vậy tôi nghi ngờ sau này). Bạn không chắc liệu sự cố này có liên quan chặt chẽ hay không với câu hỏi chính của tôi.

Nếu không tìm cách thả vào trình gỡ rối, tôi sẽ dán mã kiểm tra vào bảng điều khiển & làm việc theo kiểu rất đặc biệt và về cơ bản chụp thói quen TDD của tôi dưới chân. Vì vậy, bất kỳ lời khuyên nào sẽ được đánh giá cao - nếu không thể gọi trình gỡ lỗi, bất kỳ cách giải quyết được đề xuất nào?

Tôi đang chạy phiên bản RStudio 0.99.447 trên OS X, ở chế độ cục bộ, với R 3.2.1.

Chỉnh sửa - Tôi cũng muốn biết thêm thông tin cơ bản về các tùy chọn, ví dụ: "tùy chọn X sẽ không bao giờ hỗ trợ gỡ lỗi, bởi vì nó đang chạy trong một quá trình chia nhỏ, hãy thử tùy chọn này Y thay thế."

Cập nhật - không có câu trả lời ở đây, tôi cũng yêu cầu tại https://support.rstudio.com/hc/communities/public/questions/204779797-Debugging-testthat-tests-in-RStudio (nơi tôi cũng chưa có bất kỳ phản hồi nào).

Trả lời

5

Các công trình sau đây cho tôi:

  1. Chèn một cuộc gọi đến browser() nơi nào đó trong các bài kiểm tra đơn vị testthat.
  2. Run devtools::test() từ RStudio console (thay vì sử dụng "Test Package" mục trình đơn từ UI)

Sau đó, khi Á hậu kiểm tra chạm browser() gọi, bạn sẽ có thể sử dụng environment browser và bước qua mã.

Tôi chưa tìm được cách để kiểm tra dừng tại điểm ngắt, nhưng việc chèn browser() là một thay thế khá gần.

Để được hoàn toàn chắc chắn rằng bạn đang bắt đầu từ một nhà nước thống nhất khi nói đến tải gói, bạn có thể đóng RStudio, mở lại nó, chạy "sạch và xây dựng lại", và sau đó devtools::test()

Cuối cùng, nếu bạn đang làm việc trong gói RStudio, bạn có thể muốn xem lời khuyên sau đây từ RStudio support:

Để gỡ lỗi hiệu quả trong gói của bạn, bạn cũng sẽ muốn đảm bảo rằng gói của bạn được biên dịch tùy chọn --with-keep.source. Tùy chọn này là mặc định cho các gói mới trong RStudio; nếu bạn cần phải thiết lập nó bằng tay, nó có thể được tìm thấy trong Tools -> Project Options -> Build Tools.

+0

Bằng cách "Làm sạch và xây dựng lại", bạn có nghĩa là "Tạo và tải lại" không? Điều tôi thực sự ghét về điều đó là tôi thường vô tình cài đặt phiên bản phát triển của mình trên toàn cầu bằng cách thực hiện nó. 'dev_mode' là một giải pháp, nhưng đôi khi tôi quên bật nó lên, vì nó là một quy trình thủ công ... –

+1

Tôi do dự khi sử dụng phương thức' browser() '- gần đây có ai đó trong nhóm của tôi (không phải tôi, may mắn thay) !) đã để lại một loạt các câu lệnh 'browser()' trong mã của chúng, nó đã đi vào sản xuất, điều này rất tệ. Đó là một bummer để có để thay đổi mã chỉ để xem xét nó. Mặc dù nó không phải là khá xấu trong trường hợp này để làm điều đó trong các tệp thử nghiệm - vì một số lý do khi sử dụng 'devtools :: test()' breakpoints không hoạt động trong các tệp thử nghiệm, nhưng chúng hoạt động trong các tệp mã trong Thư mục 'R /'. –

+0

Không, có một lệnh "Làm sạch và xây dựng lại" riêng biệt, mà theo như tôi có thể nói là giống như "Xây dựng & tải lại" nhưng thực hiện một số lần dọn dẹp ban đầu để vào trạng thái có thể đoán trước được nhiều hơn. – alev

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