[英]Testing package exports using 'testthat'
問題:如何在加載我的包的環境中運行testthat
,而不是繼承自我的包?
背景: testthat
包運行測試“在一個繼承自包的命名空間環境的環境中”[參見test_check的文檔]。 這意味着它不能確保我已經正確地完成了我的出口,並且這幾次被咬了我。
例如,我的包中有以下代碼:
##' The foo() method
##' @param x object
##' @export
foo <- function(x)
UseMethod('foo')
##' @rdname foo
foo.data.frame <- function(x) {
message("foo data.frame")
}
##' @rdname foo
foo.default <- function(x) {
message("foo default")
}
以下在我的測試中:
x <- 5:13
foo(x)
那個測試就好了。 但是如果用戶安裝了包,他們就會收到此錯誤:
Error in UseMethod("foo") :
no applicable method for 'foo' applied to an object of class "c('integer', 'numeric')"
解決方案是為這兩個方法添加@exports
聲明,但是測試沒有捕獲到這一點真是@exports
了。
我更傾向於從用戶的角度來運行我的所有測試,因為我傾向於搞砸我的導出。 也許可以添加一個選項來testthat:::run_tests
,它可以選擇所需的行為?
使用test_dir
。 我沒有使用test_check
這個確切的原因。 在“/tests/run-tests.R”中(文件名無關緊要,只需要在該目錄中並以“.R”結尾)寫:
library(testthat)
library(<my package>) # insert actual package name here
test_dir('testthat') # assuming your tests are in "tests/testthat"
然后,為了運行您的測試:
setwd("<pkg dir>/tests")
source("run-tests.R")
或者從命令行:
cd <pkg-dir>/tests
Rscript run-tests.R
或者做R CMD build
和R CMD check
以這種方式運行測試。
如果您的測試不關心工作目錄,則不一定需要setwd
。 但是,如果他們這樣做,將復制由R CMD check
設置的工作目錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.