diff --git a/R/fit.R b/R/fit.R index 6fdb5265a..ca6c5928e 100644 --- a/R/fit.R +++ b/R/fit.R @@ -111,6 +111,16 @@ fit.model_spec <- rlang::abort("The 'control' argument should have class 'control_parsnip'.") } dots <- quos(...) + + if (length(possible_engines(object)) == 0) { + rlang::abort( + glue::glue( + "No engines were loaded for `{class(object)[1]}`.", + " Please load a parsnip extension package that provides one.", + " See https://www.tidymodels.org/find/parsnip/ " + ) + ) + } if (is.null(object$engine)) { eng_vals <- possible_engines(object) object$engine <- eng_vals[1] diff --git a/tests/testthat/test_fit_interfaces.R b/tests/testthat/test_fit_interfaces.R index fd1d41534..3847c9209 100644 --- a/tests/testthat/test_fit_interfaces.R +++ b/tests/testthat/test_fit_interfaces.R @@ -108,3 +108,17 @@ test_that("elapsed time parsnip mods", { expect_equal(sum(grepl("Fit time", output3)), 0) }) +test_that('No loaded engines', { + expect_error( + linear_reg() %>% fit(mpg ~., data = mtcars), + regexp = NA + ) + expect_error( + cubist_rules() %>% fit(mpg ~., data = mtcars), + regexp = "Please load a parsnip extension package that provides one" + ) + expect_error( + poisson_reg() %>% fit(mpg ~., data = mtcars), + regexp = "Please load a parsnip extension package that provides one" + ) +})