簡體   English   中英

"testthat 在 devtools::check 中失敗,但在 devtools::test 中有效"

[英]testthat fails within devtools::check but works in devtools::test

有沒有辦法重現devtools::check<\/code>使用的環境?

我的問題是我的測試可以使用devtools::test()<\/code>但在devtools::check()<\/code>中失敗。 我現在的問題是,如何找到問題。 check<\/code>報告只打印錯誤日志的最后幾行,我找不到完整的測試報告。

checking tests ... ERROR
Running the tests in ‘tests/testthat.R’ failed.
Last 13 lines of output:
...

我最近在測試中斷時遇到了類似的問題(使用devtools::test()但使用devtools::check()失敗)。 我不知道這個解決方案是否一定能解決上述問題,但它應該有助於追蹤類似的問題。

就我而言,問題最終歸結為使用需要在Suggests而不是在Imports / Depends列出的包的函數。 特別是,我的函數名為httr::content() ,當我嘗試將as = "parsed"參數傳遞給它時,該函數httr::content() 事實證明as = "parsed"使用建議的包readr讀取 csv,我需要將它添加到我的依賴項中,以便devtools::check()工作。

這是 testthat 的一個已知問題 解決方法是在tests/testthat.R的第一行添加以下tests/testthat.R

Sys.setenv(R_TESTS="")

我花很長時間研究這個錯誤,所以希望我將來可以幫助別人。 我想補充一點,我在我的函數中使用ggplot2::autoplot()時遇到了這個錯誤,它要求我將@import ggfortify添加到我的函數的 Roxygen 骨架部分。

因此,正如我在上面簡短提到的,我將一些代碼更改為不再使用knitr::purl而是使用knitr::knit ,這解決了我的問題。

expect_error(f <- runAllChunks('010_main_lfq_analysis.Rmd'), NA)
expect_error(f <- knitr::knit('010_main_lfq_analysis.Rmd', output='jnk.R', quiet=TRUE, envir=globalenv()), NA)

如果它幫助別人,這對我有用

  1. 重新安裝所有相關軟件包。 例如install.packages("testthat", "dplyr", "lubridate", "stringr") (我包含了我的包使用的所有包)
  2. 關閉 RStudio 並重新打開

然后所有測試都通過了

這也可能發生在以下場景中:您已經在R加載了一個庫,並且您正在引用該庫中沒有名稱空間綁定的函數。 例如,假設您在測試文件中使用Matrix中的nnzero()函數,並且碰巧也已經加載了library(Matrix)Matrix包。 然后devtools::test()將通過但devtools::check()失敗。 使用Matrix::nnzero()應該可以解決這個問題。

我遇到了同樣的問題,我的測試在 devtools::check() 下失敗,而在 testthat::test() 下沒有失敗

以上都不適用於我的問題,所以我決定也在這里發布我的問題和解決方案。 但首先從我的經驗中得到一些注意事項:

devtools::check() 確實 - 看起來 - 比你自己的書面測試更深入的錯誤檢查。

現在到我的代碼設置。 我有一個用於從兩個不同文件中檢索值的函數。 這些文件包含命名配置文件,每個配置文件具有一組值。 但是配置文件的名稱不同,具體取決於文件:

示例文件:

file_one 的內容:

[default]
value_A = "foo"
value_B = "bar"
value_C = "baz"

[peter]
value_A = "oof"
value_B = "rab"
value_C = "zab"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM