我正在将Rails 3.1.3用于具有Inherited Resources 1.3.0的项目.
当我有这样的控制器时:
class PostsController < InheritedResources::Base end
我用rspec测试以下内容
describe "PUT update" do describe "with invalid params" do it "re-renders the 'edit' template" do post = Post.create! valid_attributes # Trigger the behavior that occurs when invalid params are submitted Post.any_instance.stub(:save).and_return(false) put :update,{:id => post.to_param,:post => {}},valid_session response.should render_template("edit") end end end
我收到以下错误:
3) PostsController PUT update with invalid params re-renders the 'edit' template Failure/Error: response.should render_template("edit") expecting <"edit"> but rendering with <""> # ./spec/controllers/posts_controller_spec.rb:115:in `block (4 levels) in <top (required)>'
为什么是这样?我是否必须将其他东西存在?
解决方法
只需添加:
Post.any_instance.stub(:errors).and_return(['error'])
紧接着:
Post.any_instance.stub(:save).and_return(false)