避免测试时由于 readline() 造成的暂停

2024-01-01

我正在 R 中使用以下命令运行测试test_dir()函数从testthat包裹。在一些测试脚本中,有一些函数调用readline(),这在交互模式下会导致测试暂停并等待用户输入。调用的函数readline()不是我自己的,我对他们没有任何影响。用户输入与这些函数的输出无关。

有没有办法避免测试过程中的这些暂停?

想到的方法,但我不知道如何实施:

  • R 运行时禁用交互模式
  • 使用另一个函数testthat以非交互模式运行脚本的包
  • 以某种方式转移stdin到终端以外的其他地方(??)
  • 包装函数调用readline()在另一个脚本中,该脚本从我的测试脚本以非交互模式调用并使结果可用

仅使用命令行进行测试Rscript是一个选项,但我宁愿留在 RStudio 工作流程中。

======

示例代码

with_pause <- function () {  
  readline() 
  2
}
without_pause <- function () {
  2
}
expect_equal(with_pause(), without_pause())

我有一个类似的问题。我通过全局选项设置解决了这个问题。

original_test_mode <- getOption('my_package.test_mode')
options('my_package.test_mode' = TRUE)
# ... some tests ...
options('my_package.test_mode' = original_test_mode)

在我的脚本中我有一个if陈述

if(getOption('my_package.test_mode', FALSE)) {
  # This happens in test mode
  my_value <- 5
} else {
  # normal processing
  my_value <- readline('please write value: ')
}

也不是最好的方法,但它对我有用。

也许还有一个提示。碰巧我的测试脚本失败了。这里的问题是,全局选项仍然存在TRUE并且在下一轮中以及在同一会话中执行脚本时,它永远不会提示您写入值。我想我应该把一些东西放进去tryCatch功能左右。但如果你心里有这个问题,就“有时”options('my_package.test_mode', NULL)有帮助:-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

避免测试时由于 readline() 造成的暂停 的相关文章

随机推荐

  • laravel:如何获取与数据透视表中另一列相关的列(3列数据透视表)

    我不知道如何表达这个问题 但我需要执行以下操作 我有一个包含三列的数据透视表user id account id role id 所以在我的数据库中如果我有这些行account role user pivot account id user
  • oracle错误:没有足够的值

    我有一个表donor master create table donor master donor id number 10 primary key not null dob date not null age number 3 not n
  • 绑定在 WPF Datagrid 第二行标题中不起作用

    My Xaml
  • 禁用特征中的 FactoryGirl 关联

    在 Rails 应用程序中 我使用 FactoryGirl 定义一个通用工厂以及几个更具体的特征 一般情况和除一个特征之外的所有特征都具有特定的关联 但我想定义一个不创建 构建该关联的特征 我可以使用after设置关联的回调id to ni
  • 将因子转换为 R 中的日期/时间

    这是我的数据框中包含的信息 minuteofday factor w 89501 levels 2013 06 01 08 07 00 dDdt num 7 8564 2 318 minutes POSIXlt format NA NA N
  • 在 C# 中序列化匿名委托

    我试图确定使用以下序列化代理来启用匿名函数 委托 lambda 的序列化可能会导致哪些问题 see http msdn microsoft com msdnmag issues 02 09 net S3 class NonSerializa
  • Android TextField:以编程方式设置焦点+软输入

    在我看来 我有一个搜索 EditText 我想以编程方式触发该字段上的单击事件的行为 即将焦点集中到文本字段并在必要时显示软键盘 如果没有可用的硬键盘 I tried field requestFocus 该字段实际上获得焦点 但不显示软键
  • html 元素 (div) 的完整高度,包括边框、内边距和边距?

    我需要 div 的完整高度 我目前正在使用 document getElementById measureTool offsetHeight offsetHeight 返回元素的高度 包括边框和填充 如果有 但不包括边距 但是 div 内的
  • Int32.Equals 与 '==' 运算符

    我环顾四周 但似乎没有人问过这个问题 所以就这样吧 我正在开发一个自定义类 它将具有IEquatable界面 因此我正在制作自己的Equals方法 它看起来是这样的 public bool Equals QueryFilter qfilte
  • C++“new”运算符是如何实现的

    Class B B b new B default constructor B b1 new B 10 constructor which takes an argument B int x 但是 如果我们想编写一个自定义版本new 语法是
  • 使用现有私钥创建 CSR

    我想做的是 创建一个 CSR 并使用受密码保护的私钥 密钥 在 OpenSSL 中 我可以创建一个带有密码的私钥 如下所示 openssl genrsa des3 out privkey pem 2048 有什么方法可以使用我刚刚创建的密钥
  • 使用 C# 调用 php 脚本 (Unity)

    我对 Unity 和 PHP 都很陌生 目前我正在开发一个项目 可以使用 PHP 将数据从 MySQL 数据库解析到 Unity 我最初想尝试启用一种方法 用户可以更改 php 脚本并使其能够选择不同的数据表 但是有人建议我列出 php 脚
  • 如何从 nginx 发出相对 URL 重定向?

    如何在 nginx 中配置重定向以相对重定向到特定路径来响应某个 url The Nginx 文档 https www nginx com resources wiki start topics tutorials config pitfa
  • Android中的动态相对布局

    我正在尝试将两个图像放在一起 我可以让它与 xml 文件一起正常工作 但我想动态地执行此操作 ctdeasyone 是一个透明图像 所以这工作正常
  • Git推送错误:无法创建'.git/refs/remotes/jr/master.lock':文件存在

    这不是重复的 我看过这个堆栈溢出帖子 https stackoverflow com questions 8500089 fatal unable to create refs heads master lock file exists f
  • Knockoutjs 验证 areSame 或 MustMatch 示例

    我正在尝试使用 GitHub 上的 Knockoutjs 验证插件 大部分似乎工作得很好 但是当我尝试使用扩展验证 MustEqual password confirm password 时 它似乎没有做任何事情 我缺少什么 我非常想学习这
  • 如何在SQLite中进行递归查询?

    如果我的数据结构是这样的 parentA parentAA parentAAA childA 如果我能得到 childA name 我怎样才能知道所有父级的名字直到顶层 所以它会像这样 gt parentA parentAA parentA
  • 如何从 Azure Function App 中的请求正文检索字节数据

    在 Python 中 我将图像转换为字节 然后 我将字节传递到 Azure HTTP 触发器函数应用端点 URL Azure 门户 就像调用 Azure 认知服务时一样 image path r C Users User Desktop b
  • NSURL、URL 和 NSData、数据

    我是斯威夫特的新手 当我遇到这个问题时 我正在从互联网上获取图像NSURL and URL and NSData and Data 我真的很困惑 我使用哪些 我使用了以下代码 但我必须转换类型 如下所示 这样做的正确方法是什么以及两者之间的
  • 避免测试时由于 readline() 造成的暂停

    我正在 R 中使用以下命令运行测试test dir 函数从testthat包裹 在一些测试脚本中 有一些函数调用readline 这在交互模式下会导致测试暂停并等待用户输入 调用的函数readline 不是我自己的 我对他们没有任何影响 用