2016-11-15 61 views
2

我得到一个错误,因为testthat::matches冲突与dplyr::matches,我想知道如何使用testthat::test_file检查其包含对matches()通话功能,而无需在函数体中指定dplyr::matches testthat包。dplyr上有冲突时,比赛用

例如为:

> testthat::test_file('tmp_fn_testthat_test.R') 

Attaching package: ‘testthat’ 

The following object is masked from ‘package:dplyr’: 

    matches 

The following object is masked from ‘package:purrr’: 

    is_null 

Show Traceback 

Rerun with Debug 
Error in -matches("tmp") : invalid argument to unary operator In addition: Warning message: 
package ‘testthat’ was built under R version 3.2.5 

DONE ========================================================================================================================================= 

这个错误可以通过保存在你的工作目录名为tmp_fn_testthat_test.R文件下面的代码,并运行该命令testthat::test_file('tmp_fn_testthat_test_20161115.R')转载。请注意,采购或运行expect_equal命令,而未加载testthat会使测试通过。

tmp_fn <- function() { 
    tmp_df <- data.frame(tmp_a = 1, tmp_b = 2) 

    tmp_df %>% 
     select(-matches('tmp')) %>% 
     ncol 


} 

testthat::expect_equal(tmp_fn(), 0) 

回答

2

This is a known issue与dplyr 0.5。推荐的解决方案是使用明确的名称空间前缀:dplyr::matches

+0

我理解,但我的问题这里是我明确地尝试不用通过在'testthat ::'前面加载所有测试来加载'testthat',这样如果我输入文件,测试就可以工作。无论什么原因,当你运行'testthat :: test_file'时,它坚持加载包。 – Alex

0

一个解决出现在testthat::test_file定义被注释掉library(testthat),并使函数调用明确的(不知道这是否会有不好的副作用):

my_test_that_file <- function (path, reporter = "summary", env = testthat::test_env(), start_end_reporter = TRUE, 
      load_helpers = TRUE) 
{ 
    # library(testthat) 
    reporter <- testthat:::find_reporter(reporter) 
    if (load_helpers) { 
     testthat:::source_test_helpers(dirname(path), env = env) 
    } 
    lister <- testthat:::ListReporter$new() 
    if (!is.null(reporter)) { 
     reporter <- testthat:::MultiReporter$new(reporters = list(reporter, 
                 lister)) 
    } 
    else { 
     reporter <- lister 
    } 
    testthat::with_reporter(reporter = reporter, start_end_reporter = start_end_reporter, 
        { 
         lister$start_file(basename(path)) 
         testthat::source_file(path, new.env(parent = env), chdir = TRUE) 
         testthat:::end_context() 
        }) 
    invisible(lister$get_results()) 
}