Ruby on rails Rails测试:断言呈现操作

Ruby on rails Rails测试:断言呈现操作,ruby-on-rails,testing,Ruby On Rails,Testing,如何编写一个测试来断言动作new已呈现 def method ... render :action => :new end 我正在寻找类似于下面几行的内容,但要断言调用的是操作,而不是模板: assert_equal layout, @response.layout assert_equal format, @request.format 我知道我不能做@response.action 提前谢谢 黛比:我原来的答案是错的。正如@Mohammad El Abid所示,正确的方法是

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

def method
  ...
  render :action => :new
end
我正在寻找类似于下面几行的内容,但要断言调用的是操作,而不是模板:

assert_equal layout, @response.layout
assert_equal format, @request.format
我知道我不能做
@response.action

提前谢谢


黛比:我原来的答案是错的。正如@Mohammad El Abid所示,正确的方法是:

assert_template :new
assert_template :new
原始答复:

将呈现视图,并调用操作。 试试这个:
@controller.expected(:new)


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

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
这是标准脚手架的“新”视图

如果这仍然不能让你的船浮起来,我甚至会添加一个assert_标记来确保一些视图出现,这样你就知道它会显示/呈现给最终用户


希望这能有所帮助。

对于未来发现这一点的人,正确的方法是:

assert_template :new
assert_template :new

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

首先需要将
rails控制器测试
gem添加到gem文件中(因为它是从版本5开始在rails外部提取的)。然后,在测试中,只需使用:


assert\u template:new

此测试是否调用了操作方法。操作可以呈现它选择的任何视图,甚至可以重定向。文档链接: