#r #github-actions #shinytest
#r #github-действия #shinytest
Вопрос:
У меня есть упакованное блестящее приложение в https://github.com/jonathan-g/analyzeBehaviorspace это имеет следующее в наборе testthat:
test_that("directories exist", {
skip_on_cran()
if (require(shinytest)) {
appdir <- system.file("abs_app", package="analyzeBehaviorspace")
appdir <- normalizePath(appdir, winslash = "/")
# message("appdir = ", appdir)
os_type <- osName()
expect_true(os_type %in% c("win", "linux", "mac"))
# message("OS version = ", os_type)
expect_true(dir.exists(appdir), info = "app dir exists.")
resdir <- file.path(appdir, "tests", "shinytest",
stringr::str_c("test_abs-expected-", os_type))
expect_true(
dir.exists(resdir),
info = "expected test results directory exists."
)
}
})
test_that("analyzeBehaviorspace works", {
skip_on_cran()
appdir <- system.file("abs_app", package="analyzeBehaviorspace")
appdir <- normalizePath(appdir, winslash = "/")
# message("appdir = ", appdir)
if (require(shinytest)) {
os_type <- osName()
# message("OS version = ", os_type)
expect_true(os_type %in% c("win", "linux", "mac"))
expect_true(dir.exists(appdir), info = "app dir exists.")
resdir <- file.path(appdir, "tests", "shinytest",
stringr::str_c("test_abs-expected-", os_type))
expect_true(
dir.exists(resdir), info = "expected test results directory exists.")
expect_pass(
testApp(appdir, suffix = os_type, quiet = TRUE,
compareImages = FALSE, interactive = FALSE),
info = "shinytest passes."
)
}
})
R CMD check
работает локально под Windows и Ubuntu 20.04, а также под GitLab-CI, но завершается сбоем при действиях GitHub со следующей ошибкой для сборок под Ubuntu 20.04 и macOS:
❯ checking tests ...
See below...
── Test failures ───────────────────────────────────────────────── testthat ────
> library(testthat)
> library(analyzeBehaviorspace)
Loading required package: shiny
This is analyzeBehaviorspace version 1.0.0
>
> # appdir <- system.file("abs_app", package="analyzeBehaviorspace")
> # appdir <- normalizePath(appdir, winslash = "/")
> # message("appdir = ", appdir)
>
> test_check("analyzeBehaviorspace", reporter = "summary")
app: ....W1
Error: Error: R CMD check found ERRORs
Execution halted
══ Warnings ════════════════════════════════════════════════════════════════════
1. analyzeBehaviorspace works (test-app.R:34:5) - problem reading directory /home/runner/work/analyzeBehaviorspace/analyzeBehaviorspace/check/analyzeBehaviorspace.Rcheck/analyzeBehaviorspace/abs_app/tests/shinytest/test_abs-expected: No such file or directory
══ Failed ══════════════════════════════════════════════════════════════════════
── 1. Failure (test-app.R:34:5): analyzeBehaviorspace works ────────────────────
Not all shinytest scripts passed for /home/runner/work/analyzeBehaviorspace/analyzeBehaviorspace/check/analyzeBehaviorspace.Rcheck/analyzeBehaviorspace/abs_app: test_abs
Diff output:
==== test_abs ====
Only in /tmp/RtmpHh7Qmr/working_dir/RtmpYMxDys/shinytest-diff-32054897017e/test_abs-current: 001.json
Only in /tmp/RtmpHh7Qmr/working_dir/RtmpYMxDys/shinytest-diff-32054897017e/test_abs-current: 002.json
Only in /tmp/RtmpHh7Qmr/working_dir/RtmpYMxDys/shinytest-diff-32054897017e/test_abs-current: 003.json
Only in /tmp/RtmpHh7Qmr/working_dir/RtmpYMxDys/shinytest-diff-32054897017e/test_abs-current: 004.json
If this is expected, use `snapshotUpdate('/home/runner/work/analyzeBehaviorspace/analyzeBehaviorspace/check/analyzeBehaviorspace.Rcheck/analyzeBehaviorspace/abs_app')` to update
shinytest passes.
══ DONE ════════════════════════════════════════════════════════════════════════
Error: Error: Test failures
Execution halted
1 error ✖ | 0 warnings ✔ | 0 notes ✔
Error: Process completed with exit code 1.
У меня есть тест, tests/shinytest/test_abs-expected-linux
tests/shinytest/test_abs-expected-mac
подтверждающий существование каталога or, который проходит, и у меня есть тест, который osName()
возвращает win
, linux
, или mac
, но когда я вызываю testApp
с установленным suffix
аргументом osName()
, testApp
кажется, игнорирует suffix
и ищет ожидаемые результаты test_abs-expected
вместо test_abs-expected-linux
or test_abs-expected-mac
.
Любые мысли о том, что может быть причиной этого или как эффективно его отлаживать.
Мне трудно отлаживать тесты testthat в GitHub actions, потому что я не могу понять, как заставить testthat
репортеров сообщать подробную информацию об отладке (например, вывод из message()
, а не просто сообщать сводные результаты. Проблема проявляется только в действиях GitHub, поэтому я не могу отлаживать ее локально.
Мне удалось передать тесты GitHub actions путем копирования test_abs-expected-linux
test_abs-expected
в репозиторий, так что в некотором смысле я решил свою проблему, но я хотел бы понять, почему shinytest::testApp()
, похоже, игнорируется suffix
аргумент в GitHub actions, но не в локальных сборках или сборках GitLab-CI.