[rspec-users] Testing Custom Methods

Tony Spore tspore at saassoft.com
Tue Nov 15 12:17:25 EST 2011


On Mon, Nov 14, 2011 at 11:49 PM, Justin Ko <jko170 at gmail.com> wrote:

> Tony, this text right here is considered "top posting" because it is
> *above* the previous posts. Now, scroll down and you'll see my "bottom
> post".
>
> On Nov 13, 2011, at 11:03 PM, Tony Spore wrote:
>
> 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
>>
>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users
>
>
> If you can see this, you're looking at a "bottom post". Do *this* for
> every reply on any mailing list. It makes it easier to follow conversations.
> Sorry if it seems like I'm coming off as an ass, but David asked you to
> bottom post 3 times. Just want to make it clear ;)
>
>
>
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users


Ok sorry didn't understand.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20111115/6a25f7bd/attachment.html>


More information about the rspec-users mailing list