如何比较Rspec中的作业?

时间:2012-09-25 20:14:12

标签: ruby-on-rails ruby rspec ruby-on-rails-3.2

我有以下

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,但我想停止这些不良做法。

感谢。

1 个答案:

答案 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