我正在尝试编写集成测试测试,如果我的控制器为已删除的文章(仅标记为已删除)引发了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}>
因此它正确地查找我的路线(因为它知道控制器等)但仍然会引发错误。那是为什么?
谢谢,约翰内斯
答案 0 :(得分:5)
如果此测试位于spec/controllers
目录中,那么您正在调用的get
方法不期望路径,它期望您要调用的控制器操作的符号。因此,您需要将expect
行更改为:
expect { get :edit, :id => @article.id }.to raise_error(ActiveRecord::RecordNotFound)