Hash / params causing errors


#1

Hey everyone,

I’m trying to spec a controller and I can’t seem to get a test to pass
because rspec seems to see the difference between params I expect and
params that I pass. However, this comes from the same params
variable. What should I do to get this to work?

Spec::Mocks::MockExpectationError in ‘UsersController handling POST
/users should create a new user from params’
Mock ‘Class’ expected :new with ({:email=>“removed_email_address@domain.invalid”}) but
received it with ({“email”=>“removed_email_address@domain.invalid”})

Code is here: http://pastie.org/309263

Thanks!
Ramon T.


#2

On Thu, Nov 6, 2008 at 9:53 PM, Ramon T. removed_email_address@domain.invalid
wrote:

received it with ({“email”=>“removed_email_address@domain.invalid”})
expected {:email=>“removed_email_address@domain.invalid”}
got {“email”=>“removed_email_address@domain.invalid”}

Rails is converting what’s really passed (with a Symbol key) to a
String key. It’ll work if you expect the String instead.


#3

A bit dryer:


@params = { “login” => “loginator”, “email” => “removed_email_address@domain.invalid” }

User.should_receive(:new).with(@params).and_return(@user)

Ramon T.


#4

Thanks for you reply. With what you said I ended up doing this

before do
@user = mock_model(User, :to_param => “1”, :login => “loginator”,
:email => “removed_email_address@domain.invalid”, :save! => true)
User.stub!(:new).and_return(@user)
@params = { :login => “loginator”, :email => “removed_email_address@domain.invalid” }
end

it “should create a new user from params” do
User.should_receive(:new).with({“login” => “loginator”, “email” =>
“removed_email_address@domain.invalid”}).and_return(@user)
do_post
end