我有以下
it 'should assign a new profile to user' do
get :new
assigns(:user_profile).should ==(Profile.new)
end
但它不起作用。我试过'eql?'和'相等?'分别。我如何比较它以了解@user_profile的内容是否是Profile.new?
我曾经做过一个变通方法来处理指定变量的.class,检查它是否是Profile,但我想停止这些不良做法。
感谢。
答案 0 :(得分:1)
这里的问题是Object.new
按设计调用了两次会创建两个不同的对象,这些对象不相等。
1.9.2p318 :001 > Object.new == Object.new
=> false
你可以做的一件事是
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
现在,在调用控制器操作时,您实际上并没有创建新的配置文件,但是您仍在测试Profile
是否正在接收new
,并且您正在测试该返回值控制器将方法分配给@user_profile
。