这是我正在创建的规范:
describe 'POST create' do
let!(:user){ mock_model(User).as_null_object}
before do
User.stub(:new).and_return "foobs"
end
it{}
end
现在,嘲讽的全部意义在于您的期望是孤立的,因此您确切地知道应用程序出错的地方,并且您不会在一个错误的方法中产生影响(如在集成规范中)会导致一百个规格失败。
考虑到这一点,如果我不触摸我的用户模型,则上述空的期望通过。如果我弄乱用户模型的内容,我会收到ActiveRecord
错误,如果我完全删除了用户模型,我会收到此错误:
uninitialized constant UsersController::User
我认为mock_model
方法(第2行)会嘲笑模型吗?如何使上述规格完全隔离?
答案 0 :(得分:0)
您似乎需要使用double
方法。
describe 'POST create' do
let(:user) { FactoryGirl.build :user }
before do
User = double # the name of this variable could be anything.
end
it "" do
User.should_recieve(:new).with(user).and_return user
User.should_recieve(:save).and_return true
post :create
end
end
double创建null对象。然后,您对该对象运行期望,而不是实际的模型对象。它可以像任何对象一样“接收”其方法的请求,我们可以嘲笑它们。
如果我做错了,请告诉我!