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)
end
it “should have a birthday” do @record.save_cf_data({“final_outputs”=>[“birth_day”=>[“3”]]}) @record.birth_day.should eql 3
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
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”]}]})
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
… 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).
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.
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. -
So I am expecting it to send in my result, but instead the test has nil.
please post either inline or at the bottom (I moved your post to the
bottom in this case - see Top Posting and Bottom Posting).
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.
please post either inline or at the bottom (I moved your post to the bottom
in this case - see Top Posting and Bottom Posting).
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.
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.
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:
describe Record do
self.birth_day = result['birth_day'].first
You have a nil object when you didn't expect it!
The error occurred while evaluating nil.first
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.
NoMethodError:
The spec uses the string key “final_outputs”, but the code uses the symbol key
:final_outputs.
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