Подтвердить что ты не робот

Тестирование Rails: подтверждение действия render

Как я могу написать тест, чтобы утверждать, что выполняется действие new?

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

Я ищу что-то вроде строк ниже, но чтобы утверждать, что действие вызывается, а не шаблон:

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

Я знаю, что не могу сделать @response.action

Спасибо заранее!

Деб

4b9b3361

Ответ 1

Будет показано представление, вызванное действие. Попробуйте следующее:

@controller.expects(:new)

Ответ 2

Для будущих людей, которые находят это, правильный метод:

assert_template :new

Ответ 3

Скажем, у вас есть действие контроллера для создания, как показано ниже:

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

И вот стандартное изображение "posts # new" в Scaffold

<h1>New post</h1>

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

Теперь, если сообщение успешно создано, вы хотите, чтобы его перенаправляли, но если он терпит неудачу, мы просто хотим повторно выполнить действие 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, чтобы убедиться, что некоторые из них подходят, поэтому вы знаете, что он отображается/отображается конечным пользователям.

Надеюсь, что это поможет.

Ответ 4

Как и в случае с Rails 5.0.0, вы можете проверить, правильно ли обработано действие, протестировав отображаемый шаблон.

Сначала вам нужно добавить камень rails-controller-testing в свой Gemfile (поскольку он был извлечен за пределами Rails с версии 5). Затем в вашем тесте просто используйте:

assert_template :new