Rspec集成测试:路由不可用

时间:2011-08-21 14:42:22

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

我正在尝试编写集成测试测试,如果我的控制器为已删除的文章(仅标记为已删除)引发了ActiveRecord :: RecordNotFound执行:

it "should return 404 for deleted articles" do
  @article = Factory :article, :status => "deleted"
  expect { get edit_article_path(:id => @article.id) }.to raise_error(ActiveRecord::RecordNotFound)
end

这些测试在控制器规范中运行良好,但在spec / requests内部我收到此错误:

expected ActiveRecord::RecordNotFound, got #<ActionController::RoutingError: No route matches {:action=>"edit", :controller=>"articles", :id=>595}>

因此它正确地查找我的路线(因为它知道控制器等)但仍然会引发错误。那是为什么?

谢谢,约翰内斯

1 个答案:

答案 0 :(得分:5)

如果此测试位于spec/controllers目录中,那么您正在调用的get方法不期望路径,它期望您要调用的控制器操作的符号。因此,您需要将expect行更改为:

expect { get :edit, :id => @article.id }.to raise_error(ActiveRecord::RecordNotFound)

请查看RSpec Controller Spec documentation了解详情。