gpt4 book ai didi

ruby-on-rails - 带有载波的 Rails 3 测试 fixture ?

转载 作者:行者123 更新时间:2023-12-03 13:28:07 26 4
gpt4 key购买 nike

我正在从 attachment_fu 升级到carrierwave,因为 attachment_fu 在 rails 3 中损坏了。

没有一个测试能够运行,因为我们有无效的固定装置,它们使用来自 attachment_fu 的语法来处理附件文件。

例如,我们有一个 Post 模型,它有一个 PostAttachment。 PostAttachment fixture 中的数据如下所示:

a_image:
post_id: 1
attachment_file: <%= Rails.root>/test/files/test.png

这是我得到的错误:
ActiveRecord::StatementInvalid: PGError: ERROR:  column "attachment_file" of relation "post_attachments" does not exist
LINE 1: INSERT INTO "post_attachments" ("post_id", "attachment_file"...
attachment_file会被attachment_fu 拾取,它会负责为模型创建attachment_fu 附件的所有处理。

有没有办法在灯具中添加图像附件,但使用 CarrierWave 代替?

最佳答案

我设法让它工作的唯一方法是使用专门用于测试的存储提供程序,它实际上并不保存/读取文件。

在您的 config/initializers/carrier_wave.rb添加实现存储提供程序的最小接口(interface)的 NullStorage 类。

# NullStorage provider for CarrierWave for use in tests.  Doesn't actually
# upload or store files but allows test to pass as if files were stored and
# the use of fixtures.
class NullStorage
attr_reader :uploader

def initialize(uploader)
@uploader = uploader
end

def identifier
uploader.filename
end

def store!(_file)
true
end

def retrieve!(_identifier)
true
end
end

然后在初始化 CarrierWave 时为测试环境添加一个子句,例如,
if Rails.env.test?
config.storage NullStorage
end

这是 gist of my complete carrier_wave.rb以供引用。它还包括如何设置 S3 以在暂存/生产中上传和本地存储以进行开发,以便您可以了解如何在上下文中配置 CarrierWave。

配置 CarrierWave 后,您可以简单地将任何字符串放在 fixtures 列中以模拟上传的文件。

关于ruby-on-rails - 带有载波的 Rails 3 测试 fixture ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7534341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com