devtools :: test开始在我的包上失败(带有X警告),因为devtools 1.13.4和testhat 2.0

时间:2018-01-18 08:51:49

标签: r devtools testthat

我进行了重大编辑,因为我设法缩小了问题范围:

我遇到了devtools :: test的新问题。我的包用于通过单元测试没有任何问题。但在更新我的软件包(包括devtools和testthat)后,它现在失败了。

可重复示例:

我已经设法构建了一个可重现的示例:在新的包体系结构中。

foo.R :/ R /

中的R文件
foo <- function(obj){
  return(as.numeric(obj))
}

test_foo.R :/ tests / testthat中的uniit测试文件

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(&#34; tests /&#34;)

> 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 个答案:

答案 0 :(得分:0)

在包中使用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和其他用法调度一些[]特定函数,这不是正常的函数调用,所以你没有使用像{{1因为该对象也是一个data.frame,所以调用基本版本会导致问题。

This是一个相关的问题和答案。

答案 1 :(得分:0)

这是一个testhat问题,它也在github https://github.com/r-lib/testthat/issues/700上引发。

一种解决方案是在每个测试文件的开头放置一个context("some_string")