【发布时间】:2010-07-28 13:27:06
【问题描述】:
我最近刚刚将 Devise 添加到我的第一个 Rails3 应用程序中,但我在控制器测试方面遇到了一些问题。
我正在测试 User 控制器类,它与 Devise 使用的模型相同。所以在我的规范的开头我有这个:
before(:each) do
sign_in @user = Factory.create(:user)
end
现在我可以在不使用模拟或存根的情况下通过测试:
describe "GET edit" do
it "assigns the requested user as @user" do
user = Factory(:user)
get :edit, :id => user.id
assigns(:user).should eql(user)
end
end
但出于教育目的,我想知道如何让它与模拟和存根一起工作,通常它会完全直截了当,但似乎 Devise 在控制器操作之前调用 User.find,并使测试失败.
describe "GET edit" do
it "assigns the requested user as @user" do
user = Factory(:user)
User.expects(:find).with(:first, :conditions => {:id => 37}).returns(user)
get :edit, :id => '37'
assigns(:user).should be(user)
end
end
另外,通过将twice 添加到期望中,这也会失败,因为第一次调用 find 与我设置期望的不同。
任何见解将不胜感激。
【问题讨论】:
标签: ruby-on-rails ruby rspec rspec2 ruby-mocha