2010-05-26 2 views
17

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

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

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

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

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

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

Деб

ответ

0

мнение будет оказана , действие под названием. Попробуйте это:

@controller.expects(:new) 
+0

Это проверяет, что метод действия получил колл. Действие может отображать любой вид, который он выбирает или даже перенаправляет. – jwadsack

8

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

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 

А вот 'сообщения # новый' стандартного эшафот вид

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

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

70

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

assert_template :new 
4

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

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

assert_template :new