Soy bastante nuevo para probar y tengo un UserController que deseo probar. Estoy comenzando con la nueva acción y hasta ahora tengo lo siguiente;¿Cómo pruebo la asignación de una variable de instancia en la nueva acción de mi controlador con rspec?
require 'spec_helper'
describe UsersController do
describe "GET 'new'" do
it "assigns a new User to @user" do
user = User.new
get :new
assigns(:user).should eq(user)
end
it "renders the :new template"
end
end
Mi UsersController hasta ahora se ve así
class UsersController < ApplicationController
def new
@user = User.new
end
end
que esperaba mi primera prueba para trabajar, pero cuando lo ejecuto me sale el siguiente;
Failures:
1) UsersController GET 'new' assigns a new User to @user
Failure/Error: assigns(:user).should eq(user)
expected: #<User id: nil, email: nil, username: nil, password_digest: nil, created_at: nil, updated_at: nil>
got: #<User id: nil, email: nil, username: nil, password_digest: nil, created_at: nil, updated_at: nil>
(compared using ==)
Diff:#<User:0x007fe4bbfceed0>.==(#<User:0x007fe4bce5c290>) returned false even though the diff between #<User:0x007fe4bbfceed0> and #<User:0x007fe4bce5c290> is empty. Check the implementation of #<User:0x007fe4bbfceed0>.==.
# ./spec/controllers/users_controller_spec.rb:9:in `block (3 levels) in <top (required)>'
Jugar en la consola revela lo siguiente;
irb(main):001:0> a = User.new
=> #<User id: nil, email: nil, username: nil, password_digest: nil, created_at: nil, updated_at: nil>
irb(main):002:0> b = User.new
=> #<User id: nil, email: nil, username: nil, password_digest: nil, created_at: nil, updated_at: nil>
irb(main):003:0> a == b
=> false
Así que ahora tengo curiosidad de por qué los objetos ActiveRecord 2 vacíos no son iguales (después de todo, Array.new == Array.new
devuelve true), y lo que tengo que hacer para que mi tarjeta de prueba.
Si el autor quiere comprobar si un registro es a la vez nuevo y no se ha definido ninguna atributos, necesitará también una comprobación de 'should_not be_changed '. – jdoe
¡Excelente! No sabia sobre esto. –
Gracias por eso. Eso tiene buen sentido. – brad