[rspec-users] Testing Custom Methods

Tony Spore tspore at saassoft.com
Sun Nov 13 17:54:38 EST 2011


Sorry David,
I am getting this error:
ailure/Error: @record.save_cf_data(result)
     NoMethodError:
       You have a nil object when you didn't expect it!
       You might have expected an instance of Array.
       The error occurred while evaluating nil.first


Here is my Gist of my code that I can't figure out how to test. -
https://gist.github.com/1362863

So I am expecting it to send in my result, but instead the test has nil.


-Thanks,
Tony Spore
On Sun, Nov 13, 2011 at 8:12 AM, David Chelimsky <dchelimsky at gmail.com>wrote:

> On Nov 12, 2011, at 6:27 PM, Tony Spore wrote:
>
>
>
>
>
>
> -Thanks,
> Tony Spore
>
>
> On Sat, Nov 12, 2011 at 2:14 PM, David Chelimsky <dchelimsky at gmail.com>wrote:
>
>> On Nov 12, 2011, at 3:33 PM, Tony Spore wrote:
>>
>> I am attempting to test a custom method, and totally bombing out.
>> describe Record do
>>   describe '#save_cf_data' do
>>     before  :each do
>>       @record = mock_model(Record)
>>
>>
>> mock_model creates a test double, or pure mock ...
>>
>>     end
>>     it "should have a birthday" do
>>       @record.save_cf_data({"final_outputs"=>["birth_day"=>["3"]]})
>>
>>       @record.birth_day.should eql 3
>>
>>
>> ... which means that @record here ^^ is a test double, not a Record
>> object ...
>>
>>     end
>> end
>>
>> My Model looks like this:
>> class Record < ActiveRecord::Base
>>    def save_cf_data(params)
>>      result = params[:final_outputs].first
>>        ....
>>       self.birth_day = result['birth_day'].first
>>   end
>> end
>>
>>
>> ... which means that this class definition ^^ has nothing to do with
>> anything in the example above.
>>
>> I have this output - As if I'm not hitting the method correctly -
>>
>> Mock "Record_1002" received unexpected message :save_cf_data with
>> ({"final_outputs"=>[{"birth_day"=>["3"]}]})
>>
>>
>> What you want is either stub_model, or just Record.new or, if you're
>> using something like factory_girl, Factory.build(Record).
>>
>> See https://www.relishapp.com/rspec/rspec-rails/docs/mocks/mock-modeland
>> https://www.relishapp.com/rspec/rspec-rails/docs/mocks/stub-model for
>> more info.
>>
>> HTH,
>> David
>>
>
> Great thanks!
>
> So now I am at least calling the method - But when I try to add in the
> params that I'm being sent I keep returning nil -
>   Failure/Error: @record.save_cf_data(result)
>      NoMethodError:
>        You have a nil object when you didn't expect it!
>        You might have expected an instance of Array.
>        The error occurred while evaluating nil.delete
>
> In the above case I create the hash as result
> = {"final_outputs"=>["surname"=>["hagan"]]}
>
> When I manually place in the params -
> Failure/Error:
> @record.save_cf_data({"final_outputs"=>["surname"=>["hagan"]]})
>      NoMethodError:
>        You have a nil object when you didn't expect it!
>        You might have expected an instance of Array.
>        The error occurred while evaluating nil.first
>
> So now as I go down this path, I would say that I am not feeding into the
> method my params. How would it be best to do that?
>
> I am right now just trying to use rspec with no additional params.
>
> Thanks again!
>
>
> I'd love to help, but ...
>
> 1. please post either inline or at the bottom (I moved your post to the
> bottom in this case - see http://idallen.com/topposting.html).
> 2. please post actual code or a link to a gist instead of descriptions of
> the code or changes you made. And example is worth 10000 words, and it
> makes it easier for people who are trying to help to understand exactly
> what you're dealing with.
>
> Cheers,
> David
>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20111113/6ad433dd/attachment.html>


More information about the rspec-users mailing list