Próbuję dodać do mojego pakietu kilka testów, aby upewnić się, że rzeczy pozostaną niezmienione po wprowadzeniu zmian. Mam pewne trudności w robieniu tego.Testuj tę awarię, używając funkcji check()
Chcę przetestować główną funkcję mojej paczki, którą można z grubsza określić jako metodę imputacji. Więc jeśli podam n x 2
matrycę Y
do niego gdzie druga kolumna ma kilka NA
, powinien on powrócić Z
gdzie pierwsze kolumny Y
i Z
są takie same (ponieważ jest całkowicie przestrzegane), a druga kolumna powinna być przypisane tak, że istnieją nr NA
w drugiej kolumnie Z
.
Oczywiście, istnieje wiele innych wejść do funkcji, ale podstawowa struktura mojego testu jest
context("Test output")
test_that("First column equal", {
set.seed(100)
Y <- matrix(rnorm(200), 100, 2)
Y[seq(1, 100, by = 3), 2] <- NA
out <- my_fun(Y)
expect_equal(Y[, 1], out[, 1])
})
Moim problemem jest to, że nie działa. Działa po uruchomieniu devtools::test()
, ale nie przy uruchomieniu devtools::check()
. Próbowałem użyć expect_equal_to_reference()
(ponieważ to, co naprawdę chcę przetestować, jest większe i bardziej skomplikowane niż w tym przykładzie), ale także powoduje błąd, pomimo uruchomienia kodu w konsoli i porównania z zapisanym plikiem .rds
pokazuje, że są one identyczne.
znalazłem ten cytat przez Hadley (under tests):
Czasami można mieć wątpliwości, gdzie przechodzą testy po uruchomieniu interaktywnie z DevTools :: test(), ale nie kiedy w ryzach R CMD. Zwykle oznacza to, że wprowadzono błędne założenie dotyczące środowiska testowego i często trudno jest to zrozumieć.
To nie wróży dobrze, ale co mogę zrobić? Jakieś pomysły?
Oto błąd pojawia się (test_file
to nazwa pliku zawierającego powyższy kod):
checking tests ...
** running tests for arch 'i386' ... ERROR
Running the tests in 'tests/testthat.R' failed.
Last 13 lines of output:
3: asNamespace(ns)
4: getNamespace(ns)
5: tryCatch(loadNamespace(name), error = function(e) stop(e))
6: tryCatchList(expr, classes, parentenv, handlers)
7: tryCatchOne(expr, names, parentenv, handlers[[1L]])
8: value[[3L]](cond)
... 13 lines ...
5: tryCatch(loadNamespace(name), error = function(e) stop(e))
6: tryCatchList(expr, classes, parentenv, handlers)
7: tryCatchOne(expr, names, parentenv, handlers[[1L]])
8: value[[3L]](cond)
testthat results ================================================================
OK: 0 SKIPPED: 0 FAILED: 1
1. Error: First column equal (@test_file.R#12)
Próba jakiegokolwiek debugowania uproszczonego 'my_fun()' (ale wciąż nieudanego testu) byłaby przydatna. –
@ m-dz Rozumiem, że ta funkcja jest dość skomplikowana, a cały pakiet (mniej lub bardziej) składa się z bloków. Wiem, że to długa sprawa, żeby bez pytania zadać to pytanie, ale mam nadzieję, że ktoś wcześniej doświadczył czegoś podobnego. – hejseb
Może spróbuj (po https://github.com/hadley/testthat/issues/86): "Po prostu dodaj' Sys.setenv ("R_TESTS" = "") 'jako pierwszą linię w' tests/testthat.R' ". –