Rails 已连接 Active Storage?正确,但不在 rspec 异常中

Rails ActiveStorage is attached? true, but not in rspec expection

我想测试一个附加图像的动作。我使用 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.count 有效 所以,这是“绿色”:

      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.reloaduser 将刷新为数据库中的最新信息,并且应附上 user.logo