Ruby on rails 在规格中重新加载后未关联ActiveStorage附件
我想测试文件是否正确地附加到记录 我有一个带有缩略图的通知模型Ruby on rails 在规格中重新加载后未关联ActiveStorage附件,ruby-on-rails,rspec,rails-activestorage,Ruby On Rails,Rspec,Rails Activestorage,我想测试文件是否正确地附加到记录 我有一个带有缩略图的通知模型 类通知 2 2.7.0:002>“a2”。至 => 0 这可能是比赛条件吗attach实际上是将行插入blob表中,然后在您保存记录时,由添加的通知模型中的回调已附加一个id来更新blob。如果读取查询在更新查询之前完成,则可能会得到过时的数据。如果添加sleep(10),是否会更改结果或开始拍打?无论config.active\u job.queue\u adapter=:inline设置如何,结果都不会更改
类通知
我通过主动作业使用sidekiq
#config/application.rb
模块MyApp
类应用程序
我已将存储适配器设置为本地文件系统,并立即执行作业
#config/environments/test.rb
Rails.application.configure do
config.active\u storage.service=:测试
config.active\u job.queue\u适配器=:inline
结束
我有以下使用水豚和硒的规范:
它“创建模型”要做什么
单击类上的“创建操作”
附加_文件('notification[thumbnail]',Rails.root.join('spec/fixtures/uploads/notification_thumbnail.jpg'))
在“通知[标题]”中填写:“MyString”
期望做
单击“创建通知”
end.to更改{ActiveStorage::Attachment.count}.by(1)
new_notification=notification.order(在::desc.创建)
期望(第页)有内容(I18n.t('successfully_created_resource',resource:'MyString'))
新建通知。重新加载
期望(新通知。缩略图)。被附加
结束
为了进一步调查,我创建了一个简单的规范:
它“有一个附加的缩略图”吗
通知=生成(:通知)
notification.thumboil=fixture\u file\u upload(Rails.root.join('spec/fixtures/uploads/notification\u thumboil.jpg'),'image/jpg')
通知.保存
放置ActiveStorage::Blob.order(在::desc.创建)。first.attachments.inspect
期望(通知.缩略图).被附加
预期(通知.重新加载.缩略图).将被附加
结束
第一个期望总是会过去,而后者有时会失败
查看附件时,它有记录\u id
0
#
有谁能向我解释一下这种行为,并给我一些如何避免它/正确编写测试的建议吗?在调查一个不同的错误时,我意识到ActiveStorage并没有按照警告设置与UUID一起使用
2.7.0:001>“2a”。至
=> 2
2.7.0:002>“a2”。至
=> 0
这可能是比赛条件吗attach
实际上是将行插入blob表中,然后在您保存记录时,由添加的通知模型中的回调已附加一个id来更新blob。如果读取查询在更新查询之前完成,则可能会得到过时的数据。如果添加sleep(10)
,是否会更改结果或开始拍打?无论config.active\u job.queue\u adapter=:inline设置如何,结果都不会更改