Skip to content

find_schema breaks in unit tests #50

@wmay

Description

@wmay

find_schema looks in package_root/sql to find sql source files. But when running unit tests the files are in package_root/inst/sql. This makes it impossible (as far as I can tell) for an etl extension package to include etl_init in unit tests if it includes sql files.

devtools and testthat quietly replace system.file with a modified version to keep it working in most unit tests. But those packages can only replace system.file in the package being tested. So if a package imports find_schema from etl, in a unit test when find_schema calls system.file it doesn't add the extra inst folder.

I don't know if the devtools people provide a way to fix this. Maybe find_schema could check to see if package_root/sql exists, and if not then try package_root/inst/sql?

You should be able to reproduce this issue with the following steps:

  1. Create a package that extends etl.
  2. Include a sql file.
  3. Use testthat and try to test find_schema with something like the example below.
test_that("find_schema works", {
  pkgname = etl("pkgname")
  schema_path = etl::find_schema(pkgname)
  expect_equal(is.null(schema_path), FALSE)
})

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions