[rspec-users] Testing Custom Methods

Tony Spore tspore at saassoft.com
Mon Nov 14 01:03:32 EST 2011


Thanks David.
I am getting a long way now.

-Thanks,
Tony Spore
CEO
SaasSoft LLC
(805) 253-1277
saassoft.com



On Sun, Nov 13, 2011 at 4:29 PM, David Chelimsky <dchelimsky at gmail.com>wrote:

>
> On Nov 13, 2011, at 4:54 PM, Tony Spore wrote:
>
> 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
>>
>>
> Moving your post to the bottom again ....
>
> 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.
>
> The spec uses the string key "final_outputs", but the code uses the symbol
> key :final_outputs.
> HTH,
> 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/b4af09e3/attachment-0001.html>


More information about the rspec-users mailing list