2016-01-09 45 views
5

使用testthat/devtools基礎結構時,跳過R包的測試目錄中的所有測試的正確方法是什麼?例如,如果沒有連接到數據庫並且所有測試都依賴於該連接,是否需要單獨在所有文件中編寫skip,或者我可以在某處編寫一個skip當條件不符合時跳過所有testthat測試

我有一個看起來標準軟件包的設置像

mypackage中/

  • ...#其他包裝材料
  • 測試/
    • testthat.R
    • testthat/
      • 測試thing1.R
      • 測試thing2.R

起初,我以爲我可以把一個測試在testthat.R文件中像

## in testthat.R 
library(testthat) 
library(mypackage) 

fail_test <- function() FALSE 
if (fail_test()) test_check("package") 

但是,這並沒有工作,它看起來像調用devtools::test()只是忽略該文件。我想一個替代方案是將所有測試存儲在另一個目錄中,但有沒有更好的解決方案?

+0

在這個例子中,你需要'if(fail_test())'... – Thomas

回答

0

也許你可以組織測試的子目錄中,將有條件的目錄包含在父文件夾的測試:

考慮「測試」 testthat包。 尤其是,這一個看起來很有趣:

我在這裏看不到什麼,遞歸子目錄中測試掃描:

1

R Packages軟件手冊中的Skipping a test部分涵蓋了這個用例。從本質上講,你寫一個自定義函數來檢查你需要檢查的任何條件 - 你是否可以連接到你的數據庫 - 然後從所有需要條件滿足的測試中調用該函數。

例子,從書中人云亦云:

skip_if_no_db <- function() { 
    if (db_conn()) { 
    skip("API not available") 
    } 
} 

test_that("foo api returns bar when given baz", { 
    skip_if_no_db() 
    ... 
}) 

我發現這種方法比單個開關更加有用,因爲我往往有測試和不的混合切換掉所有測試依賴於我檢查的任何條件,並且我希望始終運行儘可能多的測試。