1

私は次のものを持っています

it 'should assign a new profile to user' do
  get :new
  assigns(:user_profile).should ==(Profile.new)
end

しかし、それは機能していません。「eql?」を試してみました と「等しい?」それぞれ。@user_profile の内容が Profile.new かどうかを知るために比較するにはどうすればよいですか?

以前は、割り当てられた変数の .class を実行して回避策を実行し、それがプロファイルであるかどうかを確認していましたが、これらの悪い慣行をやめたいと思います。

ありがとう。

4

1 に答える 1

1

The problem here is that Object.new invoked twice by design creates two different objects, which are not equal.

1.9.2p318 :001 > Object.new == Object.new
 => false

One thing you can do here is

let(:profile){ Profile.new }

it 'should assign a new profile to user' do
  Profile.should_receive(:new).and_return profile
  get :new
  assigns(:user_profile).should eq profile
end

Now you're not actually creating a new profile when the controller action is invoked, but you are still testing that Profile is receiving new, and you're testing that the return value of that method is being assigned by the controller to @user_profile.

于 2012-09-25T20:20:32.130 に答える