Ich bin ziemlich neu zu testen und habe einen UsersController, den ich testen möchte. Ich beginne mit der neuen Aktion und habe bisher folgendes;Wie teste ich die Zuweisung einer Instanzvariable in der neuen Aktion meines Controllers mit 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
Mein Userscontroller so sieht weit wie diese
class UsersController < ApplicationController
def new
@user = User.new
end
end
ich meinen ersten Test aber wahrscheinlich zu funktionieren, wenn ich es laufen bekomme ich folgende;
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)>'
Das Herumspielen in der Konsole zeigt folgendes;
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
So jetzt bin ich neugierig, warum 2 leere Active Objekte nicht gleich sind (immerhin Array.new == Array.new
kehrt wahr), und was muss ich tun, um meine Testdurchlauf zu machen.
Wenn der Autor überprüfen möchte, ob ein Datensatz beide neu und hat keine Attribute gesetzt, müssen er eine Überprüfung auch für 'should_not be_changed '. – jdoe
Großartig! Ich wusste nichts davon. –
Danke dafür. Das macht Sinn. – brad