首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么可能导致factory-bot无法正确关联Big Sur中已上载的文件字段

什么可能导致factory-bot无法正确关联Big Sur中已上载的文件字段
EN

Stack Overflow用户
提问于 2021-01-14 01:40:39
回答 1查看 37关注 0票数 0

升级到Big Sur后,使用fixture_file_upload的规格就不起作用了。

我的测试模型具有文件详细信息,例如

代码语言:javascript
复制
    t.string "report_file_name"
    t.string "report_content_type"
    t.integer "report_file_size"
    t.datetime "report_updated_at"

我的工厂的精简版本:

代码语言:javascript
复制
FactoryBot.define do
  factory :test do
    report { fixture_file_upload "#{Rails.root}/spec/factories/paperclip/test_report.pdf", 'application/pdf' }
  end
end

堆栈跟踪:

代码语言:javascript
复制
ActiveRecord::RecordInvalid:
       Validation failed: Report content type is invalid, Report is invalid
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/configuration.rb:18:in `block in initialize'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/evaluation.rb:18:in `create'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/strategy/create.rb:12:in `block in result'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/strategy/create.rb:9:in `tap'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/strategy/create.rb:9:in `result'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/factory.rb:43:in `run'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/factory_runner.rb:29:in `block in run'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/factory_runner.rb:28:in `run'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/strategy/create.rb:5:in `association'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/evaluator.rb:33:in `association'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute/association.rb:19:in `block in to_proc'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/evaluator.rb:77:in `instance_exec'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/evaluator.rb:77:in `block in define_attribute'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute_assigner.rb:56:in `get'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute_assigner.rb:16:in `block (2 levels) in object'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute_assigner.rb:15:in `each'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute_assigner.rb:15:in `block in object'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute_assigner.rb:14:in `tap'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute_assigner.rb:14:in `object'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/evaluation.rb:13:in `object'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/strategy/create.rb:9:in `result'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/factory.rb:43:in `run'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/factory_runner.rb:29:in `block in run'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/factory_runner.rb:28:in `run'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/strategy/create.rb:5:in `association'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/evaluator.rb:33:in `association'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute/association.rb:19:in `block in to_proc'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/evaluator.rb:77:in `instance_exec'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/evaluator.rb:77:in `block in define_attribute'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute_assigner.rb:56:in `get'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute_assigner.rb:16:in `block (2 levels) in object'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute_assigner.rb:15:in `each'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute_assigner.rb:15:in `block in object'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute_assigner.rb:14:in `tap'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute_assigner.rb:14:in `object'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/evaluation.rb:13:in `object'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/strategy/create.rb:9:in `result'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/factory.rb:43:in `run'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/factory_runner.rb:29:in `block in run'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/factory_runner.rb:28:in `run'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/strategy/create.rb:5:in `association'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/evaluator.rb:33:in `association'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute/association.rb:19:in `block in to_proc'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/evaluator.rb:77:in `instance_exec'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/evaluator.rb:77:in `block in define_attribute'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute_assigner.rb:56:in `get'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute_assigner.rb:16:in `block (2 levels) in object'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute_assigner.rb:15:in `each'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute_assigner.rb:15:in `block in object'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute_assigner.rb:14:in `tap'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/attribute_assigner.rb:14:in `object'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/evaluation.rb:13:in `object'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/strategy/create.rb:9:in `result'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/factory.rb:43:in `run'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/factory_runner.rb:29:in `block in run'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/factory_runner.rb:28:in `run'
     # /Users/evanlepolt/.rvm/gems/ruby-2.5.3/gems/factory_bot-4.8.2/lib/factory_bot/strategy_syntax_method_registrar.rb:20:in `block in define_singular_strategy_method'
     # ./spec/services/submissions/njb_soft_spec.rb:8:in `block (2 levels) in <top (required)>'  

FactoryBot 4.8.2 Rails 5.2.2 Ruby 2.5.3

我已经更新了xcode,并更新/升级了我所有的自制浇注。

最糟糕的是,我不能在一个单独的存储库中重现这个问题,这让我认为在我们的存储库中的某个地方,我们正在覆盖一些factory_bot设置。

在Linux和Mohave中,这可以很好地工作,如果我从工厂中删除报告,并在我的规范中的其他地方手动执行,那么它在Big Sur中就可以工作。

代码语言:javascript
复制
  test = create(:test)
  test.report = fixture_file_upload "#{Rails.root}/spec/factories/paperclip/test_report.pdf", 'application/pdf'
EN

回答 1

Stack Overflow用户

发布于 2021-01-15 22:16:34

这既不是回形针问题,也不是工厂机器人问题。我的示例代码是不正确的,因为我们使用的是.tlf文件,而不是pdf文件。然后我们的模型验证了这一点:validates_attachment_content_type :report_layout, content_type: 'text/plain'

在Big Sur mac上,开始将此文件读取为json,而不是纯文本。

代码语言:javascript
复制
file -b --mime my_file.tlf

# macOS 11.1
application/json; charset=us-ascii

# macOS 10.15.6
text/plain; charset=us-ascii

# Ubuntu 18.04
text/plain; charset=us-ascii

因此,内容类型验证失败。答案一直就在我面前

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65707077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档