devtools::test начал сбой на моем пакете (с предупреждением X), так как devtools 1.13.4 и testhat 2.0
Я выполняю серьезное редактирование, так как мне удалось сузить проблему:
Я столкнулся с новой проблемой с devtools:: test. Моя посылка прошла тестирование без проблем. Но после обновления моих пакетов (включая devtools и testthat) теперь происходит сбой.
Воспроизводимый пример:
Мне удалось построить воспроизводимый пример: в новой архитектуре пакета.
foo.R: файл R в / R /
foo <- function(obj){
return(as.numeric(obj))
}
test_foo.R: универсальный тестовый файл в / tests / testthat
test_that("Test my foo function: ",
{
expect_true(is.na(foo("1,5")))
})
testhat.R: чтобы запустить мои юнит- тесты в / tests /
library(testthat)
library(foo)
test_check("foo")
Два сценария
Запуск: devtools::test()
> devtools::test()
Loading foo
Loading required package: testthat
Testing foo
√ | OK F W S | Context
Error in x[[method]](...) : attempt to apply non-function
== Results =====================================================================
Duration: 0.1 s
OK: 0
Failed: 4
Warnings: 1
Skipped: 0
Запуск testtjat:: test_dir ("tests /")
> testthat::test_dir("tests/")
√ | OK F W S | Context
== testthat results ===========================================================
OK: 2 SKIPPED: 0 FAILED: 0
== Results =====================================================================
Duration: 0.1 s
OK: 0
Failed: 0
Warnings: 0
Skipped: 0
Environement
> sessionInfo()
R version 3.4.3 (2017-11-30)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=French_France.1252 LC_CTYPE=French_France.1252 LC_MONETARY=French_France.1252 LC_NUMERIC=C
[5] LC_TIME=French_France.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] foo_0.0.0.9000 testthat_2.0.0
loaded via a namespace (and not attached):
[1] Rcpp_0.12.15 roxygen2_6.0.1 rprojroot_1.3-2 crayon_1.3.4 assertthat_0.2.0 digest_0.6.14 withr_2.1.1 commonmark_1.4
[9] R6_2.2.2 backports_1.1.2 magrittr_1.5 cli_1.0.0 rlang_0.1.6 stringi_1.1.6 rstudioapi_0.7 xml2_1.1.1
[17] desc_1.1.1 devtools_1.13.4 tools_3.4.3 stringr_1.2.0 yaml_2.1.16 compiler_3.4.3 memoise_1.1.0
NB:
На Github открыт вопрос по этому вопросу: https://github.com/hadley/devtools/issues/1675
2 ответа
Это была проблема, которая также поднималась на github https://github.com/r-lib/testthat/issues/700.
Решение было поставить context("some_string")
в начале каждого тестового файла.
Когда вы используете data.table
в вашем пакете импортирует data.table в описании недостаточно. (обратите внимание, это должно быть imports
не import
)
DESCRIPTION
Imports:
data.table
Это только попросить пользователя пакета иметь data.table
пакет установлен.
Вам также нужно будет добавить это
NAMESPACE
import(data.table)
Обычно это используется для записи function
вместо pkg::function
и не предлагается. Однако вы должны сделать это для data.table
,
Ниже мое объяснение, но оно может быть не совсем точным. Я думаю, это потому, что data.table нужно отправить некоторые data.table
конкретные функции для неявного []
и другое использование, которое не является нормальным вызовом функции, поэтому вы не используете что-то вроде data.table::rbindlist
и, поскольку объект также является data.frame, вызывается базовая версия и возникает проблема.
Это связанный вопрос и ответ.