附加Rails ActiveStorage ?没错,但不符合我的期望



我想测试一个附加图像的操作。我使用rSpec请求规范。在实际请求中附加图像,但rspec失败为什么?

def update_logo
if params[:logo].present?
image = params[:logo]
if image && @current_user.logo.attach(image)
puts @current_user.logo.attached? # !!! results in TRUE !!!
render json: @current_user, status: :ok
end
end
end

it "attaches a logo" do
post update_logo_url,
params: { logo: fixture_file_upload(file_fixture('400x400.png'), 'image/png') },
headers: { "Authorization" => token_generator(user.id) }
expect(user.logo).to be_attached
end
expected `#<ActiveStorage::Attached::One:0x00007fb9f57a90e8 @name="logo", @record=#<User id: 1, name: "....210787000 +0000">>.attached?` to be truthy, got false

顺便说一句:

其他测试,如ActiveStorage::Attachment。统计工作因此,这是"green":

it 'saves the uploaded file' do
expect {
subject
}.to change(ActiveStorage::Attachment, :count).by(1)
end

在检查附件之前尝试重新加载user实例:

expect(user.reload.logo).to be_attached
# ----------^^^^^^

在发出请求之前将user从数据库中取出。然后,控制器方法将创建自己的实例,添加附件,并保存所有内容。但测试中的user不会知道这些。如果您使用user.reload,则user将使用数据库中的最新信息进行刷新,并应附加user.logo

相关内容

  • 没有找到相关文章

最新更新