Тестирование Rails: действие assert render - PullRequest
20 голосов
/ 26 мая 2010

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

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

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

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

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

Заранее спасибо!

Deb

Ответы [ 4 ]

76 голосов
/ 28 июля 2011

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

assert_template :new
9 голосов
/ 06 августа 2010

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

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' view для Scaffold

<h1>New post</h1>

<% form_for(@post) do |f| %>
<%= f.error_messages %>
...... # just to show, it's 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, чтобы удостовериться, что часть представления появляется, чтобы вы знали, что он отображается / отображается для конечного пользователя.

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

6 голосов
/ 19 июля 2016

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

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

assert_template :new

0 голосов
/ 18 июля 2010

Представление будет отображаться , действие называется . Попробуйте это:

@controller.expects(:new)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...