5

我正在尝试在 Rails 控制器中从使用 respond_to 切换到 respond_with。一切都很顺利,除了在控制器规格中测试无效保存。这是一个例子:

描述 MyController 做...

describe "PUT update" do
    context "with invalid attributes" do
      it "should re-render the edit page" do
        style = stub_model(Style)
        Style.stub(:find) { style } 
        Style.any_instance.stub(:save).and_return(false)
        put :update
        response.should render_template(:edit)
      end
    end
  end
end

这适用于我的旧 response_to 样式更新操作,但使用 respond_with,我得到

失败/错误:response.should render_template("edit")

所以,简而言之 - 我如何测试这个?...或者我应该假设 render_with 知道它在做什么,根本不测试?有什么一般性的建议吗?

提前喝彩

PS:更新动作:

  def update
    @style = Style.find(params[:id])
    flash[:notice] = "Style updated" if @style.update_attributes(params[:style])
    respond_with(@style)
  end
4

1 回答 1

5

我一直在研究这个确切的东西(我是如何找到这个主题的) - 到目前为止,我有以下内容:

Location.any_instance.stub(:valid?).and_return(false)
Location.any_instance.stub(:errors).and_return('anything')

(其中 Location 是我使用 respond_with 的模型)

但是我相信一定有更好的方法来做到这一点 - 如果我找到它,我一定会发布它!

注意:我也在使用响应者 gem,因此如果您不使用这些行之一,您可能不需要它!

于 2012-04-21T08:48:09.240 回答