Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在规格中重新加载后未关联ActiveStorage附件_Ruby On Rails_Rspec_Rails Activestorage - Fatal编程技术网

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设置如何,结果都不会更改