我想测试一个附加图像的操作。我使用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
。