una que metodo instancia initialize ruby rspec

ruby - que - Cómo probar la variable de instancia se instancia en el controlador con RSpec



que es una instancia en ruby (3)

Estoy intentando verificar que una nueva acción en mi controlador RESTful establezca una variable de instancia del tipo de objeto requerido. Parece bastante típico, pero tiene problemas para ejecutarlo

Controlador de cliente

def new @client = Client.new end

Prueba

describe "GET ''new''" do it "should be successful" do get ''new'' response.should be_success end it "should create a new client" do get ''new'' assigns(:client).should == Client.new end end

Resultados en ...

''ClientsController GET ''new'' should create a new client'' FAILED expected: #, got: # (using ==)

Lo cual es probablemente porque está tratando de comparar 2 instancias de registro activo, que difieren. Entonces, ¿cómo puedo verificar que el controlador configure una variable de instancia que contenga una nueva instancia del modelo de Cliente?


Para el uso de la sintaxis RSpec v3 2016:

expect(assigns(:client)).to be_a(Client)

Además, para otros que pueden detenerse aquí debido al título de la pregunta, aquí se muestra cómo probar si una variable de instancia @client se configuró en cualquier elemento.

# in controller action @client = Client.find_by(name: "John") # spec assignment based on collection membership expect(assigns.keys).to include(''client'')

Consulte la respuesta de @Attila Györffy sobre por qué se debe acceder al hash de asignaciones con las teclas de cadena.



technicalpickles en #rspec me ayudó ...

assigns(:client).should be_kind_of(Client)