Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 6上的Factory Bot 5在运行build_stubbed Factory时引发验证错误_Ruby On Rails_Rspec_Factory Bot_Rspec Rails_Ruby On Rails 6 - Fatal编程技术网

Ruby on rails Rails 6上的Factory Bot 5在运行build_stubbed Factory时引发验证错误

Ruby on rails Rails 6上的Factory Bot 5在运行build_stubbed Factory时引发验证错误,ruby-on-rails,rspec,factory-bot,rspec-rails,ruby-on-rails-6,Ruby On Rails,Rspec,Factory Bot,Rspec Rails,Ruby On Rails 6,我有以下工厂 函数_groups.rb 函数.rb 在我的rails_helper.rb中,我的代码如下所示 rails_helper.rb 主要问题是,当我尝试运行build\u stubbed(:reports)时,我遇到了一个错误 ActiveRecord::RecordInvalid Exception: Validation failed: Function group must exist 不知道为什么,因为我认为build_stubbed也应该能够创建工厂的父记录 在我切换到Fa

我有以下工厂

函数_groups.rb 函数.rb 在我的rails_helper.rb中,我的代码如下所示

rails_helper.rb 主要问题是,当我尝试运行
build\u stubbed(:reports)
时,我遇到了一个错误

ActiveRecord::RecordInvalid Exception: Validation failed: Function group must exist
不知道为什么,因为我认为build_stubbed也应该能够创建工厂的父记录


在我切换到Factory Bot 5和Rails 6之前,它一直运行良好。关于如何解决这个问题有什么线索吗?在这里挣扎了一段时间。

请尝试检查
配置.active\u记录的值。默认情况下,它属于\u required\u

发生在我身上的事情是在升级到Rails 6之前,我没有在
config/application.rb
中使用
config.load\u defaults
,我依赖于
的旧(Rails 5.X之前)行为属于默认情况下不需要的关联

当我升级到Rails 6时,我设置了
config.load\u defaults 6.0
,设置
属于\u required\u,默认值为true

有两种方法可以解决此问题:

选项1:添加
config.active\u record.besides\u至\u required\u默认值=false
config/application.rb

选项2:更新模型中的
所属行,使其具有
可选:true
,用于不需要的关联


来源:

尝试检查
config.active\u记录的值。默认情况下属于\u required\u

发生在我身上的事情是在升级到Rails 6之前,我没有在
config/application.rb
中使用
config.load\u defaults
,我依赖于
的旧(Rails 5.X之前)行为属于默认情况下不需要的关联

当我升级到Rails 6时,我设置了
config.load\u defaults 6.0
,设置
属于\u required\u,默认值为true

有两种方法可以解决此问题:

选项1:添加
config.active\u record.besides\u至\u required\u默认值=false
config/application.rb

选项2:更新模型中的
所属行,使其具有
可选:true
,用于不需要的关联


来源:

功能组中
功能是什么?协会?还是数组列?这是一个抛出验证错误的模型,因此请也包含它。
function\u组中的
functions
是什么?协会?还是数组列?它是一个抛出验证错误的模型,所以请也包括它。
FactoryBot.define do
  factory :function do
    factory :organization_report_function do
      name { "Org Report Function" }
      module_class { "organization_report_function" }
    end

    factory :account_status_report_function do
      name { "Acct Status Report" }
      module_class { "account_status_report_function" }
    end
  end
end
require 'email_spec'
require 'capybara/rails'
require 'capybara/rspec'
require 'capybara-screenshot/rspec'

require 'capybara/poltergeist'

SERVER_PORT = 10000 + ENV.fetch('TEST_ENV_NUMBER', 0).to_i
Capybara.server = :puma, { Silent: true }
Capybara.server_port = SERVER_PORT
Capybara.javascript_driver = :poltergeist

options = { :js_errors => false, :debug => false, :phantomjs => Phantomjs.path, :phantomjs_logger => "/dev/null", timeout: 120 }

Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app, options)
end

Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

ActiveRecord::Migration.check_pending!

RSpec.configure do |config|
  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
  # config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.render_views
  config.include Warden::Test::Helpers
  config.include EmailSpec::Helpers
  config.include EmailSpec::Matchers
  config.include LoginMacros
  config.include BaseRateMacros
  config.include Requests::JsonHelpers, type: :controller
  config.include Devise::Test::ControllerHelpers, type: :controller
  config.include LoginControllerHelpers, type: :controller
  config.include(Shoulda::Matchers::ActiveModel, type: :model)
  config.include(Shoulda::Matchers::ActiveRecord, type: :model)

  config.before(:each) do
   allow(FunctionGroup).to receive(:find_by_name).with("Reports").and_return(build_stubbed(:reports))
  end
  config.use_transactional_fixtures = false

  config.include FactoryBot::Syntax::Methods

  config.infer_base_class_for_anonymous_controllers = false

end
ActiveRecord::RecordInvalid Exception: Validation failed: Function group must exist