Сообщение об ошибке: my.func () не равно "Умная ОС". .Причина в том, что Sys.info
возвращает именованный символьный вектор, в то время как ваша функция насмешки a list
.
Просто измените функцию насмешки и ожидаемое значение, и она будет работать:
test_that("base function can be mocked",
with_mock(
Sys.info = function() return(c(sysname = "Clever OS")),
expect_equal(my.func(), c(sysname = "Clever OS"), fixed = TRUE)
)
)
Этоработает даже в пакете.
Примечание. Копирование базовых функций не должно работать согласно справке with_mock
, но работает (по крайней мере, на данный момент).
Следующее (my.func () $ `sysname`), кажется, прошло тест с оригинальным кодом из вопроса.
test_that("base function can be mocked",
with_mock(
Sys.info = function() return(list(sysname = "Clever OS")),
expect_equal(my.func()$`sysname`, "Clever OS", fixed = TRUE)
)
)
В качестве альтернативы, есть список, где строка в expect_equal
test_that("base function can be mocked",
with_mock(
Sys.info = function() return(list(sysname = "Clever OS")),
expect_equal(my.func(), list(`sysname` = "Clever OS"), fixed = TRUE)
)
)