我正在尝试设置规范以正确运行我的嵌套资源。
这是我正在尝试正确设置的测试代码
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。
答案 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)
再次修改:
在这种情况下,控制器中有代码正在进行违规通话。根据以下评论。