r - 使用锁定命名空间的 R 模拟测试
问题描述
我正在努力在 R 中创建一些单元测试,我需要模拟一些函数,比如RCurl::getURL
它们返回预设输出并且不需要网络连接。
这是一个例子:
library(mockthat)
test_that("API works", {
mock_response <- mockthat::mock('[{"foo":7}]')
mockthat::with_mock(
getURL=mock_response,
{
result <- myFunction()
})
...
这失败并出现以下错误,但仅当我在devtools::check()
orR CMD check
下运行时(它在 下成功devtools::test()
):
not ok 1 API works
Error: cannot change value of locked binding for 'getURL'
Backtrace:
1. mockthat::with_mock(...) test-yes.R:29:2
2. base::lapply(mocks, set_mock)
3. mockthat:::FUN(X[[i]], ...)
4. mockthat:::do_assign(mock$name, mock$new_value, mock$env)
5. base::assign(name, val, envir = env)
有什么我可以改变的,或者我可以使用的解决方法吗?
我在用着:
> packageVersion('mockthat')
[1] '0.2.6'
> cat(head(capture.output(sessionInfo()), 3), sep="\n")
R version 4.1.1 (2021-08-10)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Big Sur 11.4
但问题似乎也存在于testthat
's mocking 的东西下(现在已被弃用,所以我不想使用它)也是mockery
如此。
为没有创建正确的道歉reprex
- 我不确定如何在没有整个包结构的情况下演示问题。
[改编自 https://github.com/nbenn/mockthat/issues/6 上报告的问题]
解决方案
推荐阅读
- rust - Ownership: differences between tuples and arrays in Rust
- r - 如何将数据框行分组到列表中?
- javascript - Javascript将日期转换为毫秒
- assembly - 减值重复两次
- javascript - 如何以 datatables.js 的方式实现折叠行?
- javascript - 单击菜单按钮后,如何在wordpress中将移动导航栏菜单背景颜色从透明更改为靛蓝?
- python - Kivy - Scrollview - 如何知道当前显示了哪些小部件
- go - 在 Go 中锁定第三方包的特定版本
- javascript - 什么是 MIME 类型('text/html'),为什么 chrome 不支持它以及如何禁用它
- node.js - 嵌套数组上的猫鼬“填充”返回 null