diff --git a/lib/rspec/rails/example/controller_example_group.rb b/lib/rspec/rails/example/controller_example_group.rb index 3150f3d46..636a194a1 100644 --- a/lib/rspec/rails/example/controller_example_group.rb +++ b/lib/rspec/rails/example/controller_example_group.rb @@ -176,6 +176,7 @@ def method_missing(method, *args, &block) super end end + ruby2_keywords :method_missing if respond_to?(:ruby2_keywords, true) included do subject { controller } diff --git a/spec/rspec/rails/example/controller_example_group_spec.rb b/spec/rspec/rails/example/controller_example_group_spec.rb index 56b53049d..50569e2a8 100644 --- a/spec/rspec/rails/example/controller_example_group_spec.rb +++ b/spec/rspec/rails/example/controller_example_group_spec.rb @@ -19,6 +19,13 @@ def group_for(klass) expect(group.included_modules).to include(RSpec::Rails::Matchers::RoutingMatchers) end + it "handles methods invoked via `method_missing` that use keywords" do + example = group.new + example.define_singleton_method(:has_val?) { |val:| val == 1 } + expect(example).to example.have_val(val: 1) + expect(example).to_not example.have_val(val: 2) + end + context "with implicit subject" do it "uses the controller as the subject" do controller = double('controller')