shinytest TestApp игнорирует аргумент «суффикс» в действиях GitHub

#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.