测试Rails创建控制器操作而不触及DB

时间:2015-01-10 18:35:43

标签: ruby-on-rails ruby rspec mocking stub

我想测试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并模拟它的行为。

有更好/更清洁的方法吗?

0 个答案:

没有答案