J'essaie de simuler la méthode de sauvegarde d'un modèle utilisateur pour qu'elle renvoie false, et de simuler ce que le contrôleur ferait en cas d'échec de la validation.
Mon cahier des charges ressemble à ça :
require 'spec_helper'
describe UsersController do
describe 'POST create_email_user' do
it 'responds with errors json if saving the model fails' do
@params = {
:last_name => 'jones',
:email => 'asdfasdfasfd@'
}
User.stub(:new_email_user) .with(@params) .and_return(@mock_user)
@mock_user.stub(:save) .and_return(false)
post :create_email_user, :user => @params, :format => :json
response.body.should == @mock_user.errors.as_json
response.status.should == :unprocessable_entity
end
end
end
L'action du contrôleur ressemble à cela :
class UsersController < ApplicationController
def create_email_user
@user = User.new_email_user(params[:user])
if @user.save
# code left out for demo purposes
else
render json: @user.errors, status: :unprocessable_entity
end
end
end
Lorsque j'exécute cette spécification, j'obtiens l'erreur qui dit essentiellement que l'appel attendu à new_email_user a reçu de mauvais arguments :
1) UsersController POST create_email_user responds with errors json if saving the model fails
Failure/Error: post :create_email_user, :user => @params, :format => :json
<User(id: integer, email: string, encrypted_password: string, reset_password_token: string, reset_password_sent_at: datetime, remember_created_at: datetime, sign_in_count: integer, current_sign_in_at: datetime, last_sign_in_at: datetime, current_sign_in_ip: string, last_sign_in_ip: string, created_at: datetime, updated_at: datetime, uid: string, provider: string, first_name: string, last_name: string, registration_id: integer, gender: string, authentication_token: string) (class)> received :new_email_user with unexpected arguments
expected: ({:last_name=>"jones", :email=>"asdfasdfasfd@"})
got: (["last_name", "jones"], ["email", "asdfasdfasfd@"])
Please stub a default value first if message might be received with other args as well.
Il semble que rails convertisse le has en un tableau de paires clé-valeur, alors que mon code utilise simplement le hash direct dans la configuration.
Comment puis-je simuler cette conversion vers un tableau, ou est-ce que je fais autre chose de mal ?