我想测试Rails create
控制器操作而不触及数据库以节省时间。如何通过遵循TDD最佳实践来实现这一目标?
我有以下典型的create
控制器操作:
def create
@partner= Partner.new(params[:partner].permit(:name, :region, :contact))
if @partner.save
flash[:success] = 'Partner successfuly saved'
redirect_to partner_url(@partner)
else
render 'new'
end
end
为了正确测试这种方法,如果不接触数据库,我做了以下工作:
specify 'successful create redirects to the show view' do
@partner = FactoryGirl.build_stubbed(:partner)
expect_any_instance_of(Partner).to receive(:save) do |_self|
_self.id = @partner.id
true
end
post :create, partner: @partner.attributes
expect(response).to redirect_to partner_path(@partner.id)
end
这很好但是为了使它不触及DB我必须存根save
并模拟它的行为。
有更好/更清洁的方法吗?