diff --git a/lib/factory_bot/definition_proxy.rb b/lib/factory_bot/definition_proxy.rb index dc139ad56..0907f209d 100644 --- a/lib/factory_bot/definition_proxy.rb +++ b/lib/factory_bot/definition_proxy.rb @@ -94,7 +94,7 @@ def method_missing(name, *args, &block) # rubocop:disable Style/MissingRespondTo if association_options.nil? __declare_attribute__(name, block) elsif __valid_association_options?(association_options) - association(name, association_options) + association(name, association_options, &block) else raise NoMethodError.new(<<~MSG) undefined method '#{name}' in '#{@definition.name}' factory diff --git a/spec/factory_bot/definition_proxy_spec.rb b/spec/factory_bot/definition_proxy_spec.rb index 4523cd9fa..d1dbb88a3 100644 --- a/spec/factory_bot/definition_proxy_spec.rb +++ b/spec/factory_bot/definition_proxy_spec.rb @@ -74,6 +74,19 @@ "Did you mean? 'static_attributes_are_gone { \"true\" }'\n" ) end + + it "raises an AssociationDefinitionError when called with a `:factory`-key and providing a block" do + definition = FactoryBot::Definition.new(:user) + proxy = FactoryBot::DefinitionProxy.new(definition) + invalid_call = lambda do + proxy.author(factory: :user) { :this_should_raise_an_error } + end + + expect(invalid_call).to raise_error( + FactoryBot::AssociationDefinitionError, + "Unexpected block passed to 'author' association in 'user' factory" + ) + end end describe FactoryBot::DefinitionProxy, "#sequence" do