Hi Josh,

Thanks for your feedback. After calling instance_methods on my class I saw that the selector was called and also tried to setup the expectation as you mentioned. Sadly this didn't work either. I get the following syntax error:

...FFF

Failures:

  1) MyClass loginWithEmail:password: should call :loginSucceededWithInfo after successful authentication
     Failure/Error: @requestBuilder.should_receive(:"buildRequestWithUrl:method:header:body:")
     SyntaxError:
       /Library/Frameworks/MacRuby.framework/Versions/0.10/usr/lib/ruby/Gems/1.9.2/gems/rspec-mocks-2.5.0/lib/rspec/mocks/method_double.rb:78: syntax error, unexpected ':', expecting ';' or '\n'
                 def buildRequestWithUrl:method:header:body:(*args, &block)
                                         ^
       /Library/Frameworks/MacRuby.framework/Versions/0.10/usr/lib/ruby/Gems/1.9.2/gems/rspec-mocks-2.5.0/lib/rspec/mocks/method_double.rb:78: syntax error, unexpected tAMPER
                 def buildRequestWithUrl:method:header:body:(*args, &block)
                                                                     ^
       /Library/Frameworks/MacRuby.framework/Versions/0.10/usr/lib/ruby/Gems/1.9.2/gems/rspec-mocks-2.5.0/lib/rspec/mocks/method_double.rb:79: syntax error, unexpected ':', expecting $end
       ...received :buildRequestWithUrl:method:header:body:, *args, &b...
       ...                              ^
     # ./Tumblizr/spec/Model/GATumblrAuthenticator_spec.rb:54:in `block'

Curious enough, in another project of mine I'm also mocking the same method but in that case it worked.

This expectation was setup with Mocha, it's testing a macruby class not an Objective C class as I'm trying to do in the other project.

request_builder.expects( :buildRequestWithUrl )
        .with() do |url, args|

            

            assert( ( url.include?( users[0] ) && 
                      url.include?( users[1] ) && 
                      url.include?( api_key  ) ), "Invalid URL." )

            

            assert_equal( "GET", args[:method], "Wrong HTTP method." )
        end

In the other project I also tried to use mocha instead of rspec's mocks but I had the same issues. Apparently the mocking frameworks can't define a method with the selector sent to the mock.

Gabriel Ayuso

On May 6, 2011, at 4:26 PM, Joshua Ballanco wrote:

Hi Gabriel,

So, you've stumbled across a bit of a confusing "feature" of MacRuby and interaction with Obj-C. The full method name of the Obj-C method, as Ruby sees it, is actually "buildRequestWithUrl:method:header:body:", since this is the selector. So, I think your mock should work if you simply modify it as follows:

@requestBuilder.should_receive(:"buildRequestWithUrl:method:header:body:")
.with("http://example.com", method: "POST", header: nil, body: anything() )
.and_return(nil)

Please let us know if that doesn't work!

Cheers,

Josh
On Wednesday, May 4, 2011 at 4:16 PM, Gabriel Ayuso wrote:
Hi,

I'm having some strange issue with rspec mocks and hope someone can point out what I'm doing wrong.

I have a Objective C class with the method: buildRequestWithUrl:method:header:body:
I wrote an rspec mock for this class. I'm setting up an expectation as follows:

@requestBuilder.should_receive(:buildRequestWithUrl)
.with("http://example.com", method:"POST", header:nil, body:anything() )
.and_return(nil)


When the class being tested calls the aforementioned method I get the following error:

RuntimeError:
NSInvalidArgumentException: -[Mock buildRequestWithUrl:method:header:body:]: unrecognized selector sent to instance 0x200373ea0

I set the expectations for another method of the same class called :queryStringForDictionary
In this case the expectation and call do work.

@requestBuilder.should_receive(:queryStringForDictionary).and_return( body )

In another project I'm calling the same class from ruby code and there the mocks and expectations do work properly. In this Objective C project they don't.

Thanks in advance,
Gabriel Ayuso


_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel


_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel