Rspec test:为嵌套资源创建方法

时间:2013-01-19 17:36:32

标签: ruby-on-rails-3 rspec integration-testing

我正在尝试设置规范以正确运行我的嵌套资源。

这是我正在尝试正确设置的测试代码

it "redirects to the created unit" do
    post :create, {:course_id => @course.id , :unit => valid_attributes}
    response.should redirect_to(course_unit_path(@course, Unit.last))
end

本质上应该尝试为“course”创建一个嵌套资源“unit”。 不幸的是,我在所有POST DELETE和PUT测试中收到以下错误

Failure/Error: post :create, {:course_id => @course.id , :unit => valid_attributes}
 NoMethodError:
   undefined method `unit_url' for #<UnitsController:0x000000059f1000>

这是有道理的,因为unit_url应该是course_unit_url但它是RSpec调用它...

如何让RSpec选择正确的命名路径? 对于所有GET测试,我手动传递了:course_id。

1 个答案:

答案 0 :(得分:0)

这就是我所做的:

it "redirects to the created unit" do
  unit_id = "barry"
  Unit.any_instance.should_receive(:save).and_return(true)
  Unit.any_instance.stub(:id).and_return(unit_id)
  post :create, {:course_id => @course.to_param , :unit => valid_attributes}
  response.should redirect_to(course_unit_path(@course, unit_id))
end

我认为这个测试的重点不在于它创建了一个新模型并重定向它,而只是它重定向。我有另一个规范来确保它创建一个新模型。这种方法的另一个好处是它不会触及数据库,所以它应该运行得更快。

我希望有所帮助。

修改

我也注意到我在before :each部分中有这个可能相关的内容:

Course.stub!(:find).and_return(@course)

再次修改:

在这种情况下,控制器中有代码正在进行违规通话。根据以下评论。