将Rspec中的表单变量传递给更新方法

时间:2014-10-06 18:50:25

标签: ruby-on-rails rspec

我还是比较新的rspec方式。我在redirect_to上阅读了很多帖子,但似乎无法通过此错误。我试图在我的rspec测试中模拟表单变量/值的传递,但是遇到路由错误。我正在将测试转换为对现场和工作的应用程序进行rspec测试。

在我的employees_micros_controller.rb中,我有一个需要params [:employees_micro] [:id]的更新方法。我的问题是如何在我的rspec测试中模拟这个?

控制器:

def update
  @em = nil
  # check for id from form
  if params[:employees_micro][:id]
    @em = EmployeesMicro.find_by_id(params[:employees_micro][:id])
  end
  ....
end

Rspec测试:注意:###错误行###

# update and redirect
describe 'POST #update' do
  it "updates employee_micro and redirect to employee_details" do
    # @emp_micros set in before(each) above
    @emp_micros.home_job = 123
    # update method looks for params[:employees_micro][:id]
    post :update, :employees_micro => { :id => @emp_micros } ### error line ###
    expect(response).to redirect_to("employee_details_employee_path")
  end
end

错误:

Failure/Error: post :update, :employees_micro => { :id => @emp_micros }
 ActionController::RoutingError:
   No route matches {:employees_micro=>{:id=>"11960"}, :controller=>"employees_micros", :action=>"update"}

我的>>发布:更新行语法正确吗?

我不明白路由错误。我只是试图模拟从我的测试中将表单变量传递给更新方法。如果我删除post / put行之后的所有内容,我仍会得到相同的错误,所以肯定是在那一行。

我也尝试过使用" put"代替" post"在测试中。这给我带来了同样的错误。

感谢您提供任何建议或建议。

1 个答案:

答案 0 :(得分:0)

更新路由期望:id参数位于顶层,因此请使用:

post :update, :id => @emp_micros, :employees_micro => { <other attributes to update> }