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: префикс.