Rails系统测试w/Capybara RackTest引发ActiveSupport::MessageVerifier



我有一个典型的Rails模型表单,它带有一个允许多个附件的文件附件选择器。它在开发中运行良好,但在系统测试期间,会引发ActiveSupport::MessageVerifier::InvalidSignature异常。

  • 轨道7.0.2.2
  • 水豚3.36.0
  • 机架测试1.1.0

模型has_many_attached :photos

该表单使用form_withmultipart: true

HTML源代码看起来是正确的。

在开发过程中,手动使用带有0或任何文件附件的表单可以正常工作。

在系统测试中,我使用的是rack_test驱动程序。

test "creating a quote request" do
visit new_quote_request_path
fill_in "First name", with: 'FAKE FIRST'
# ...
click_on "Submit"
assert_text "Success"
end

在控制器中,我的规范参数允许方法看起来像:

def quote_request_params
params.require(:quote_request).permit(:first_name, :last_name, :email,
:phone_number, :shipping, :promo_code, :description, :item_type_id, :brand_id,
photos: [])
end

我的控制器create方法是典型的。。。

def create
@quote_request = QuoteRequest.new(quote_request_params)
respond_to do |format|
# ...

在系统测试中,QuoteRequest.new(quote_request_params)的调用会引发ActiveSupport::MessageVerifier::InvalidSignature异常。

有了断点,我可以看到quote_request_params看起来像:

#<ActionController::Parameters {"first_name"=>"FAKE FIRST",
"last_name"=>"FAKE LAST", "email"=>"fake@fake.com", 
"phone_number"=>"5415555555", "shipping"=>"1", "promo_code"=>"", 
"description"=>"Fake quote request description.", 
"item_type_id"=>"980190962", "brand_id"=>"980190962",
"photos"=>[
"",
"#<Capybara::RackTest::Form::NilUploadedFile:0x000000010dae35b8>"
]} permitted: true>

Capybara似乎在做它的默认行为,为多部分表单附加一个"nil文件">

为什么测试会引发ActiveSupport::MessageVerifier::InvalidSignature异常?

这是Rails 7和机架测试的一个问题。可以通过在config/environments/test.rb中放入以下内容暂时解决:

config.active_storage.multiple_file_field_include_hidden = false

有关更多详细信息,请参阅机架测试问题。

相关内容

  • 没有找到相关文章

最新更新