![](/img/trans.png)
[英]testthat with lintr::expect_lint_free() fails with devtools::check() but works with 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)
如果它幫助別人,這對我有用
install.packages("testthat", "dplyr", "lubridate", "stringr")
(我包含了我的包使用的所有包)然后所有測試都通過了
這也可能發生在以下場景中:您已經在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.