2015-07-21 13 views
8

Czy możliwe jest wywołanie debuggera w RStudio podczas testów testthat? Nie udało mi się znaleźć konfiguracji, która by to umożliwiła (różne kombinacje "użyj funkcji pakietu devtools, jeśli jest dostępna" w ustawieniach, trafiając w opcję "Pakiet testowy" w menu "Kompilacja -> Więcej", uruchamiając test() w konsola, nawiązywanie połączeń browser() itp.), ale jeszcze nie znalazłem sposobu.Debugowanie testów "testthat" w RStudio

ja również znaleźć się gubię dużo podczas testowania, niepewny, czy kod jest prowadzony został zainstalowany w bibliotekach systemowych (wykonując „Build & Reload”), lub jest prowadzony in situ z lokalnego R katalog, lub co - czasami RStudio narzeka, że ​​punktu przerwania nie można ustawić, dopóki pakiet nie zostanie przebudowany (więc podejrzewam, że pierwszy) lub nie (tak podejrzewam, że drugi). Nie jestem pewien, czy ten problem jest ściśle związany z moim głównym pytaniem.

Bez znajdowania sposobu na wklejenie się do debuggera, kończę wklejając kod testowy do konsoli & pracując w bardzo doraźny sposób i zasadniczo strzelając do moich nawyków TDD w stopach. Więc każda rada byłaby doceniona - jeśli nie można wywołać debuggera, jakiekolwiek sugerowane obejścia?

Używam wersji RStudio 0.99.447 na OS X, w trybie lokalnym, z R 3.2.1.

Edytuj - Chciałbym również poznać więcej informacji o opcjach, np. "opcja X nigdy nie będzie wspierała debugowania, ponieważ działa w rozwidlonym procesie, spróbuj zamiast tego użyć innej opcji Y".

Aktualizacja - nie mając odpowiedzi tutaj, zapytałem również o numer https://support.rstudio.com/hc/communities/public/questions/204779797-Debugging-testthat-tests-in-RStudio (gdzie również nie miałem żadnych odpowiedzi).

Odpowiedz

5

następujące prace dla mnie:

  1. wstawić wywołanie browser() gdzieś w testach jednostkowych testthat.
  2. Run devtools::test() z konsoli RStudio (zamiast korzystania z menu „pakiet testowy” z UI)

Potem, kiedy zawodnik testowy uderza browser() inwokację, powinieneś być w stanie korzystać z environment browser i przejdź przez kod.

Nie znalazłem sposobu, aby uzyskać test, aby zatrzymać w punktach przerwania, ale wstawianie inwokacji browser() jest dość blisko zamiennikiem.

Aby mieć absolutną pewność, że począwszy od stanu spójnego, jeśli chodzi o pakiety załadunkowych, można zamknąć RStudio, otworzyć ją ponownie uruchomić „Czyste i odbudować”, a następnie devtools::test()

Wreszcie jeśli pracujesz w ramach pakietu RStudio, może chcesz sprawdzić następujące porady od RStudio support:

w celu efektywnego debugowania w pakiecie, można również chcą mieć pewność, że pakiet jest skompilowany z opcję --with-keep.source. Ta opcja jest domyślna dla nowych pakietów w RStudio; jeśli chcesz ustawić ją ręcznie, możesz ją znaleźć w Narzędzia -> Opcje projektu -> Narzędzia do budowania.

+0

Przez "Czystość i przebudowę" rozumiesz "Build & Reload"? Rzeczą, której naprawdę nie lubię, jest to, że często przez przypadek instaluję moją wersję programistyczną na całym świecie. 'dev_mode' jest jednym z rozwiązań, ale czasami zapominam o włączeniu tego, ponieważ jest to proces ręczny ... –

+1

Jestem niezdecydowany, aby skorzystać z metody' browser() '- ostatnio ktoś w moim zespole (nie ja, na szczęście !) pozostawił w swoim kodzie kilka instrukcji 'browser()', które przeszły na produkcję, która była zła. To bummer, który musi zmienić kod tylko po to, żeby go dokładnie obejrzeć. Chociaż nie jest tak źle w tym przypadku, aby zrobić to w plikach testowych - z jakiegoś powodu przy korzystaniu z 'devtools :: test()' punkty przerwania nie działają w plikach testowych, ale działają w plikach kodu pod Katalog 'R /'. –

+0

Nie, istnieje osobne polecenie "Wyczyść i przebuduj", które, o ile mogę powiedzieć, jest takie samo jak "Utwórz i przeładuj", ale wykonuje wstępne czyszczenie, aby uzyskać bardziej przewidywalny stan. – alev