Rspec :存根 ActiveStorage 下载方法

2024-01-04

我开发的系统使用 ActiveStorage 将缓存数据存储在 S3 上,然后再将其用于其他用途。在我的规范中,我想存根该文件的下载方法,并加载特定文件以进行测试。

allow(user.cached_data).to receive(:download)
                       .and_return(read_json_file('sample_data.json'))

(read_json_file是一个规范助手File.read then JSON.parse一个数据文件。)

我收到此错误:

#<ActiveStorage::Attached::One:0x00007f9304a934d8 @name="cached_data", 
@record=#<User id: 4, name: "Bob", email: "[email protected] /cdn-cgi/l/email-protection",
created_at: "2019-08-22 09:11:16", updated_at: "2019-08-22 09:11:16">,
@dependent=:purge_later> does not implement: download

我不明白,the docs https://edgeguides.rubyonrails.org/active_storage_overview.html#downloading-files明确地说这个对象应该实现下载。

Edit

正如建议的Jignesh https://stackoverflow.com/users/936494/jignesh-gohel and Stephen https://stackoverflow.com/users/680847/stephen-hanson,我尝试过这个:

allow(user.cached_data.blob).to receive(:download)
                            .and_return(read_json_file('sample_data.json'))

我收到以下错误:

Module::DelegationError:
       blob delegated to attachment, but attachment is nil

user是由 FactoryBot 生成的,所以我目前正在尝试附加我的cached_data该对象的示例文件。

我的工厂是这样的:

FactoryBot.define do
  factory :user
    name { 'Robert' }
    email  { '[email protected] /cdn-cgi/l/email-protection' }

    after(:build) do |user|
      user.cached_data.attach(io: File.open("spec/support/sample_data.json"), filename: 'sample.json', content_type: 'application/json')
    end
  end
end

但是当我添加它时after build阻止工厂,我收到以下错误:

ActiveRecord::LockWaitTimeout:
       Mysql2::Error::TimeoutError: Lock wait timeout exceeded

也许这是另一个 Stackoverflow 问题。


正如其他人在评论中指出的那样,#download是在ActiveStorage::Blob类,不ActiveStorage::Attached::One。您可以使用以下命令下载该文件:

if user.cached_data.attached?
  user.cached_data.blob.download
end

我添加了检查以确保cached_data被附加是因为blob代表附加,如果不附加将会失败。

这里是#download 的文档 https://api.rubyonrails.org/classes/ActiveStorage/Blob.html#method-i-download.

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

Rspec :存根 ActiveStorage 下载方法 的相关文章

  • Rails 创建 schema_migrations - Mysql2::Error: 指定的键太长

    我正在使用Rails 3 2 6和Mysql 6 0 9 但我在MySQL 5 2 25上有完全相同的错误 当我创建新数据库时 rake db create 然后当我尝试加载架构时 rake schema load 我收到此错误 Mysql
  • Rails 是否为 rake 任务运行初始化程序?

    当我运行 rake 任务时 是否执行配置 初始化程序中的脚本 如果你的 rake 任务取决于 environment 即 您像这样声明您的任务 task my task gt environment do end
  • Rails 5.2 Active Storage 添加自定义属性

    我有一个带有附件的模型 class Project lt ApplicationRecord has many attached images end 当我附加并保存图像时 我还想保存一个附加的自定义属性 display order 整数
  • 无法安装 RMagick 0.0.0。找不到 Magick 配置

    我正在运行 debian 服务器并在一段时间后升级了所有软件包 apt get update apt get upgrade apt get distro upgrade 然后 rmagick 不再工作了 因为 imagemagick 被更
  • 'rails new' 创建一个 'validate_default_type!':选项的默认值必须与其类型匹配。 (参数错误)错误

    我正在尝试创建一个新的 Ruby on Rails 应用程序 每次我输入rails new之后 我收到此错误 usr local lib ruby gems 2 2 0 gems thor 0 19 2 lib thor parser op
  • 使用 OCMock 以代码块作为参数的存根方法

    有没有一种方法可以存根方法 以块作为参数 例如方法 void reverseGeocodeLocation CLLocation location completionHandler CLGeocodeCompletionHandler c
  • 在所有延迟的作业之前挂钩

    是否可以在所有delayed job任务之前运行一个方法 基本上 我们试图确保每台运行delayed job的服务器都有我们代码的最新实例 因此我们希望运行一个方法来在每个作业运行之前检查这一点 我们已经有了 check 方法并在其他地方使
  • 在 Rails App 中实现 WrapBootstrap 主题

    我刚刚购买了一个 wrapbootstrap 主题 并尝试将其插入我的 Rails 应用程序中 一些 css 如填充 导航栏 字形图标 和大多数 javascript 无法正常运行 我将所有样式表和 javascript 分别复制到 ass
  • Capistrano 无法定位应用程序部署中的 Gemfile 错误

    我正在尝试将 Rails 应用程序部署到生产服务器 并决定使用以下命令将其部署到 DigitalOcean本指南 https gorails com deploy ubuntu 14 04 overview RVM 要部署 我使用以下命令
  • 从 Rails 2.3.8 升级到 4.0

    我正在 Rails 2 3 8 上运行一个应用程序 我计划将其升级到 Rails 4 0 RC 版 对我来说最简单的方法是什么 我需要先升级到 Rails 3 x 吗 注意 在我当前的实现中 我使用八哥和雪貂 作为升级的一部分 我也在考虑搬
  • YouTube 视频出现 Phantom JS 错误

    Phantom JS 版本 1 9 1 恶作剧版本 1 3 0 从今天开始 YouTube 嵌入视频在运行 javascript 测试时会出现 poltergeist 错误 我的 YouTube 代码只是默认的嵌入 YouTube 代码 这
  • Rails:将参数从视图传递到控制器

    我在 Rails 中有以下模型 class Task lt ActiveRecord Base attr accessible description name project belongs to project validates na
  • 在 git 中管理 schema.rb 的首选方法是什么?

    我不想添加schema rb to gitignore 因为我希望能够从该文件加载新的数据库架构 然而 保持检查状态会导致各种虚假冲突 而这些冲突很容易通过新的解决方案解决 db migrate reset 基本上我想要一种方法 将 sch
  • 如何显示 RSpec 测试生成的 SQL 查询日志?

    我正在为我的 Rails 3 应用程序编写规范 我想测试数据库事务是否真的有效 如果能够看到我的应用程序在规范驱动下生成的 sql 查询 这将非常有帮助 有没有办法像在 Rails 控制台中一样查看查询 我正在使用 Rails 3 0 9
  • 日期时间到 NSDate

    如何转换字符串2010 11 19T20 00 00Z进入一个NSDate object 我尝试过使用 dateFormatter setDateFormat yyyy MM ddTHH mm ssZ 但看起来我的自定义格式样式错误 PS
  • 将 R 与 Rsruby 集成

    我想知道是否有人有将 R 集成到 Rails 中的经验 特别是在 heroku 上 我熟悉 rsruby gem 它是 ruby 与 R 事实上的 也许是唯一的 绑定 但是有关将 R 与 Rails 集成的文档即使不是不存在 也是很少的 比
  • 更快地将数据库从一个heroku应用程序传输到另一个应用程序

    有没有更快的方法将我的生产数据库传输到测试应用程序 目前我正在做一个heroku db pull然后到我的本地机器heroku db push app testapp但这变得越来越耗时 我有一些种子数据 但它并不像简单地使用我的真实数据进行
  • 如何为 MySQL 和 Postgres 编写不区分大小写的查询?

    我在本地运行 MySQL 数据库进行开发 但部署到使用 Postgres 的 Heroku Heroku 处理几乎所有事情 但我不区分大小写的 Like 语句变得区分大小写 我可以使用 iLike 语句 但我的本地 MySQL 数据库无法处
  • 如何通过Grape API获取路由

    我使用 gem grape 作为 api 我尝试通过命令获取 api urlrake grape routes namespace grape do desc routes task routes gt environment do API
  • Rails/heroku 从 gem 迁移到 toolbelt

    我曾经在一个项目中使用过 heroku gem 既然工具带已经出来了 我想换一个 我从 Gemfile 中删除了 gem 并通过 gem uninstall heroku 卸载了它 我使用heroku网站上的pkg安装了heroku工具带

随机推荐

  • 网络电子邮件斑马条纹表在 Gmail、Hotmail、Outlook 上不可能吗?

    我正在尝试创建一个具有斑马条纹样式的网络邮件模板 该模板在不同的客户端上看起来相同 该模板来自第三方应用程序 我无法控制 该应用程序迭代候选者 我唯一能做的就是为每个候选者创建一个部分 如下所示伪代码 for candidate of ca
  • 使用同一 DLL 的多个版本

    我遇到过一种情况 应用程序具有一个或多个 dll 的多个 不兼容 版本 app exe a dll v3 0 plugins foo foo dll plugins foo a dll v4 0 plugins foo 在这个例子中 app
  • 导出为 CSV 文件并在浏览器中打开

    我遇到了一个问题 我需要将数据导出到 csv 文件 但不将文件存储在文件系统中 相反 我只需要在浏览器中打开文件 我编写了以下代码将数据写入 csv 文件 FileWriter myWriter new FileWriter output
  • grpc make 找不到协议 3

    我按照以下方式安装了grpc java指示 https github com grpc grpc java在我的 Mac 上 运行 Mavericks 这包括安装 protobuf v3 0 0 alpha 2 我这样做了 which pr
  • LINQ 中的聚合与求和性能

    求和的三种不同实现IEnumerable 源下面给出了当源有 10 000 个整数时所花费的时间 source Aggregate 0 result element gt result element 需要 3 毫秒 source Sum
  • Java 中的 STXXL 等效项

    我正在寻找一个专为 Java 中的大型数据集设计的集合框架 其行为透明 例如STXXL http stxxl sourceforge net 对于 C 来说是这样 它应该透明地交换到磁盘 但比普通的基于操作系统的虚拟机交换更有效 Strin
  • 将数字向下舍入到最接近的十次方

    我有一个数字 我需要将其四舍五入到最接近的十次方 看起来这应该是可能的 不需要一大堆 if 语句或使用递归或循环 但我不知道最优雅的方法 如果不清楚我的意思 这里有一些例子 f 1 1 f 5 1 f 15 10 f 43 10 f 456
  • 如何获取当前 TensorFlow 名称范围

    我创建相对名称范围tf name scope 如何获取当前的绝对名称范围 从代码来看 它看起来像tf get default graph name stack会给我这个 但这看起来像是一种非官方的方式 有官方的方法吗 我认为不是 因此我做了
  • iPad 2 Safari 显示像素化 html 文本和图像

    我们正在为 iPad 和 iPhone 开发 HTML5 CSS3 应用程序 该应用程序在 iPad 和所有 iPhone 上运行良好 但是 iPad 2 在启动时显示 html dom 对象像素化 并且保持这种状态 有时总是这样 有时会持
  • FailedPreconditionError:表已初始化

    我正在使用数据集 api 从 tfrecords 读取数据 我正在使用以下代码将字符串数据转换为虚拟数据 SFR1 tf feature column indicator column tf feature column categoric
  • 当内容中包含 .com 时,链接在 标记中不起作用

    在我的代码中 我生成了 html 电子邮件消息的正文 其部分内容如下 a href mylink pl SomeName com a 当我在邮件客户端或 Gmail 中收到此电子邮件并单击链接时 我将被定向到SomeName com而不是到
  • 调用约定和评估顺序[重复]

    这个问题在这里已经有答案了 我知道 C 没有指定参数传递给函数的顺序 但是如果我们写下面的代码 void cdecl func int a int b int c printf d d d a b c int main int i 10 f
  • 会话超时后如何重定向到主页

    我正在开发一个网站 我想在会话超时后重定向到主页 谁能帮我解决这个问题 http csharpdotnetfreak blogspot com 2008 11 detecting session timeout and redirect h
  • Java2MySQL > 再次因底层异常导致通信链路失败

    我正在用Java编写程序 它连接到MySQL数据库 由于第一类是具有单个静态方法返回的类java sql Connection 调试完毕并连接正常后 我再也没有碰过它 几天前 我发现我的程序返回了这个错误 com mysql jdbc Co
  • 您需要关闭 HTML 中的元标签和链接标签吗?

    我只是在阅读某人的 HTML 他从未在 HTML head 部分关闭元标记和链接标记 代码运行良好 关闭这些标签是可选的吗 我认为如果标签没有关闭 它就会格式错误 A tag必须始终由标签关闭符号关闭 gt 如果我们忽略某些名义上适用于非
  • c/c++中void指针的用法

    嘿 我想知道如何在现实世界中应用空指针来使软件更安全 更灵活 例如 我知道 void 指针 它将转换到什么指针对外部是隐藏的 这将使软件更安全 您使用 void 指针还有其他原因吗 空指针不会使软件变得更安全 在 c 中使用 void 的原
  • 如何在调用 Live Keyup 事件后延迟执行 Javascript 函数?

    嘿程序员 我已经从下面的函数中删除了所有内容 以准确定位我需要帮助的内容 调用 keyup 事件后 reloadContent 函数将进行 ajax 调用以从数据库收集新数据 唯一的问题是 我的服务器超载 因为 keyup 事件没有延迟 每
  • 用于管理 Razor 部分视图脚本的 HtmlHelpers

    我正在尝试使用For 循环 Html 助手 http www nuget org packages Forloop HtmlHelpers 用于管理我的 ASP Net MVC 4 项目中 Razor 部分视图的脚本 div class r
  • 为什么我的 NSOperation 子类永远不会完成?

    我有一个NSOperation我想同时运行的子类 我的理解是 要使并发操作起作用 我需要定义isConcurrent回来YES 我需要定义start method 我需要发送 KVO 通知isExecuting and isFinished
  • Rspec :存根 ActiveStorage 下载方法

    我开发的系统使用 ActiveStorage 将缓存数据存储在 S3 上 然后再将其用于其他用途 在我的规范中 我想存根该文件的下载方法 并加载特定文件以进行测试 allow user cached data to receive down