我想添加一些測試到我的包,以確保事情保持原樣,當我做出更改。我在這方面遇到了一些困難。testthat使用檢查失敗()
我想測試我的包的主要功能,它可以粗略地描述爲一種插補方法。所以,如果我舉一個n x 2
矩陣Y
它在第二列有一些NA
,它應該返回Z
其中Y
和Z
第一列是相同的(因爲它是完全觀察到的),第二欄應估算,以便有在Z
的第二列中沒有NA
。
顯然,還有其他一些函數的輸入,但我的測試的主要結構是
context("Test output")
test_that("First column equal", {
set.seed(100)
Y <- matrix(rnorm(200), 100, 2)
Y[seq(1, 100, by = 3), 2] <- NA
out <- my_fun(Y)
expect_equal(Y[, 1], out[, 1])
})
我的問題是,這是行不通的。它運行時,我運行devtools::test()
,但不是運行時devtools::check()
。我嘗試使用expect_equal_to_reference()
(因爲我真正想測試的比這個例子更大更強大),但是它也會引發錯誤,儘管在控制檯中運行代碼並與保存的.rds
文件進行比較顯示它們是相同的。
我發現這句話被哈德利(under tests):
有時你可能會在那裏與devtools運行 當交互::測試(測試通過)的問題,但未能中的R CMD檢查時。 這通常表示您已經對測試環境做出了錯誤的假設,並且很難弄明白。
它不是好兆頭,但我能做什麼?有任何想法嗎?
這裏是我的錯誤(test_file
是包含上述代碼的文件的名稱):
checking tests ...
** running tests for arch 'i386' ... ERROR
Running the tests in 'tests/testthat.R' failed.
Last 13 lines of output:
3: asNamespace(ns)
4: getNamespace(ns)
5: tryCatch(loadNamespace(name), error = function(e) stop(e))
6: tryCatchList(expr, classes, parentenv, handlers)
7: tryCatchOne(expr, names, parentenv, handlers[[1L]])
8: value[[3L]](cond)
... 13 lines ...
5: tryCatch(loadNamespace(name), error = function(e) stop(e))
6: tryCatchList(expr, classes, parentenv, handlers)
7: tryCatchOne(expr, names, parentenv, handlers[[1L]])
8: value[[3L]](cond)
testthat results ================================================================
OK: 0 SKIPPED: 0 FAILED: 1
1. Error: First column equal (@test_file.R#12)
要嘗試任何調試,簡化的'my_fun()'(但仍然失敗測試)將是有用的。 –
@ m-dz我明白,但是這個函數非常複雜,整個包(或多或少)只包含它的構建塊。我知道沒有它就問這個問題是一個漫長的過程,但我希望有人經歷過類似的事情。 – hejseb
也許嘗試(在https://github.com/hadley/testthat/issues/86後):「只需將'Sys.setenv(」R_TESTS「=」「)'添加爲'tests/testthat.R'中的第一行」。 –