【问题标题】:Rails testing: assert render actionRails 测试:断言渲染动作
【发布时间】:2010-05-26 19:06:58
【问题描述】:

如何编写测试来断言动作new 已呈现?

def method
  ...
  render :action => :new
end

我正在寻找类似下面几行的内容,但要断言调用的是动作,而不是模板:

assert_equal layout, @response.layout
assert_equal format, @request.format

我知道我做不到@response.action

提前致谢!

德布

【问题讨论】:

    标签: ruby-on-rails testing


    【解决方案1】:

    对于以后发现这个的人来说,正确的方法是:

    assert_template :new
    
    【解决方案2】:

    假设您有一个用于创建的控制器操作,如下所示:

    def create
      @post = Post.new(params[:post])
    
      respond_to do |format|
        if @post.save
          format.html { redirect_to(@post, :notice => 'Post was successfully created.') }
          format.xml  { render :xml => @post, :status => :created, :location => @post }
        else
          format.html { render :action => "new" }
          format.xml  { render :xml => @post.errors, :status => :unprocessable_entity }
        end
      end
    end
    

    这是标准的 Scaffold 'posts#new' 视图

    <h1>New post</h1>
    
    <% form_for(@post) do |f| %>
    <%= f.error_messages %>
    ...... # just to show, it's bigger....
    

    现在,如果 Post 成功创建,您希望被重定向,但如果失败,我们只想重新渲染 NEW 动作。下面的测试使用我们的主要人物 DJTripleThreat 所说的使用 assert_template

      test "should not create post and instead render new" do
        post :create, :post => { }
    
        assert_template :new
        #added to doubly verify
        assert_tag :tag => "h1", :child => /New post/
      end
    

    如果这仍然不能让您的船浮起来,我什至会添加一个 assert_tag 以确保某些视图正在出现,因此您知道它已显示/呈现给最终用户。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      从 Rails 5.0.0 开始,您可以通过测试显示的模板来测试操作是否正确呈现。

      您首先需要将rails-controller-testing gem 添加到您的Gemfile 中(因为它是从Rails 版本5 开始提取的)。然后,在您的测试中,只需使用:

      assert_template :new

      【讨论】:

        【解决方案4】:

        我原来的答案是错误的。正如@Mohammad El-Abid 下面指出的,正确的方法是:

        assert_template :new
        

        原答案:

        视图将被渲染,动作被调用。 试试这个: @controller.expects(:new)

        【讨论】:

        • 这测试了 action 方法是否被调用。一个动作可以呈现它选择的任何视图,甚至可以重定向。
        猜你喜欢
        • 1970-01-01
        • 2013-06-18
        • 1970-01-01
        • 2020-06-13
        • 2015-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多