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, вызывается базовая версия и возникает проблема.

Это связанный вопрос и ответ.

Другие вопросы по тегам