Devtools:: test() работает, но devtools:: check() - нет. Зачем?
Я тестирую этот пакет R
Следующие три вещи работают просто отлично:
Тем не менее, следующие вещи
-
devtools::check()
-
devtools::build_win()
# (см. вывод win-builder здесь)
произвести эту ошибку:
R CMD результаты проверки 1 ошибка | 0 предупреждений | 0 отмечает, что проверка тестов... ОШИБКА Запуск 'testthat.R Выполнение тестов в' tests/testthat.R не удалось. Последние 13 строк вывода: 40: mutate_.data.frame(., City_pop = ~ readr :: parse_number (Population..4), metro_pop = ~ readr :: parse_number (Population..5), urban_pop = ~ readr :: parse_number (Population..6), Country = ~ gsub (",", "_", Country)) 41: мутировать (.data,! (! (! dots))) 42: mutate.data.frame(.data ,! (! (! dots))) 43: as.data.frame (мутировать (tbl_df (.data),...)) 44: мутировать (tbl_df (.data),...) 45: mutate.tbl_df (tbl_df (.data),...) 46: mutate_impl (.data, dots) testthat Results ================================== ==================================== OK: 34 пропущено: 0 не выполнено: 1 1. Ошибка: города работает (@test-etl.R # 113) Ошибка: testthat модульные тесты не удалось Выполнение остановлено
Кроме того, в старом выпуске задания Travis-CI dplyr
об отсутствии dplyr
и readr
, а в разрабатываемом выпуске задания Travis-CI возникает ошибка невозможности подключения к базе данных. (Я подозреваю, что эти ошибки не связаны с вышеизложенным.)
Я читал это и это, и это, и это, но ни одна из них не кажется моей проблемой.
Я испробовал все свои обычные приемы, и я уверен, что в коде нет ошибки, есть просто какое-то несоответствие среды /NAMESPACE
которое я не понимаю и не знаю, как отлаживать.,
Есть идеи? Я на Ubuntu
использую R 3.4.1
.
MWE
# shell
git clone [email protected]:beanumber/etl.git
# R
library(devtools)
test()
check()
Ответы
Ответ 1
Я думаю, что лучший ответ (и тот, который я всегда использую, особенно при написании кода для других или пакетов "для самостоятельного использования"), заключается в использовании соглашения package_name :: function(), когда вы используете функции, импортированные из других пакетов.
Например:
library(dplyr)
library(plyr)
df <- data.frame(a=rnorm(10), b = c(rep("a",5),rep("b",5)))
df %>% group_by(b) %>% summarise(mean_value = mean(a), count = n())
не собирается работать dplyr :: sumrize() сделает это (на самом деле выдает очень полезное предупреждение).
В целом, каждый раз, когда вы загружаете библиотеку, вы получите сообщение о том, какие функции из пакета уже определены в другом месте. Например, для dplyr на моем ноутбуке: следующие объекты маскируются из пакета: base: intersect, setdiff, setequal, union
Если вы посмотрите на эти предупреждения, вы увидите, какие функции вы больше не можете/не должны вызывать. Обратите внимание, что в приведенном выше случае базовая функция union теперь может вызываться только base :: union, стандартный вызов union() будет использовать функцию dplyr. Другими словами, последняя загруженная библиотека - это библиотека, используемая по умолчанию.
Надеюсь, что помог
Ответ 2
Возможно, ваши тесты вызывают неэкспортированную функцию в вашем пакете. devtools::test
загружает ваш пакет с помощью load_all
, который по умолчанию делает все в вашем пакете видимым. С другой стороны, devtools::check
tarball из вашего пакета и затем запускает отдельный процесс R для установки tarball и запуска тестов. Из-за этого ваша неэкспортированная функция больше не видна.
Чтобы это исправить, убедитесь, что в ваших тестах используются только экспортированные функции, и, если они есть, добавьте к pkgname:
префикс.