Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Doublespeak: Define #respond_to_missing? on ObjectDouble #1038

Merged
merged 2 commits into from
Jul 30, 2017

Commits on Jul 25, 2017

  1. Doublespeak: Define #respond_to_missing? on ObjectDouble

    The `delegate_method` matcher uses Doublespeak internally to do its job.
    The delegate object is completely stubbed using an ObjectDouble,
    available from Doublespeak, which is shoulda-matchers's own test double
    library. ObjectDouble is a class that responds to every
    method by implementing `method_missing`.
    
    Say you are using Ruby 2.4 and you are testing a class that uses the
    Forwardable module to do some delegation, and you are using
    `delegate_method` in your test. When you run your test you will a
    warning that looks something like:
    
        Courier#deliver at ~/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/forwardable.rb:156 forwarding to private method #deliver
    
    Why is this happening? When the code in your class gets exercised,
    Forwardable will delegate the delegate method in question to
    ObjectDouble, and the method will get intercepted by its
    `method_missing` method. The fact that this is actually a private method
    is what Forwardable is complaining about.
    
    To fix this, all we need to do is add `respond_to_missing?` in addition
    to `method_missing?`. This is explained here:
    
        https://bugs.ruby-lang.org/issues/13326
    mcmire committed Jul 25, 2017
    Configuration menu
    Copy the full SHA
    d0c0329 View commit details
    Browse the repository at this point in the history
  2. Hound

    mcmire committed Jul 25, 2017
    Configuration menu
    Copy the full SHA
    e58e689 View commit details
    Browse the repository at this point in the history