On Nov 13, 2011, at 4:54 PM, Tony Spore wrote:

> On Sun, Nov 13, 2011 at 8:12 AM, David Chelimsky <dchelim...@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 <dchelim...@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-model and 
>> 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@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to