2010-05-26 40 views
17

Làm cách nào để viết một thử nghiệm để khẳng định rằng hành động new được hiển thị?Kiểm tra đường ray: khẳng định hành động hiển thị

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

Tôi đang tìm một cái gì đó giống như các dòng dưới đây, nhưng để khẳng định rằng hành động được gọi là, không phải là mẫu:

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

Tôi biết tôi không thể làm @response.action

Cảm ơn trước!

Deb

Trả lời

0

Quan điểm sẽ được render, hành động gọi. Hãy thử điều này:

@controller.expects(:new) 
+0

Thử nghiệm này đã được gọi. Một hành động có thể hiển thị bất kỳ chế độ xem nào mà nó chọn hoặc thậm chí chuyển hướng. – jwadsack

8

Hãy nói rằng bạn có một hành động điều khiển cho tạo, như sau:

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 

Và đây là tiêu chuẩn Scaffold 'viết # mới' xem

<h1>New post</h1> 

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

Bây giờ, nếu một Bài đăng được tạo thành công mà bạn muốn được chuyển hướng, nhưng nếu nó không thành công, chúng tôi chỉ muốn hiển thị lại hành động MỚI. Bài kiểm tra dưới đây sử dụng những gì người đàn ông chính của chúng tôi DJTripleThreat nói sử dụng 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 

Nếu điều đó vẫn không nổi thuyền của bạn, tôi thậm chí muốn thêm một assert_tag để đảm bảo một số quan điểm được sắp tới, vì vậy bạn có biết rằng nó sẽ được hiển thị/trả lại cho người dùng cuối.

Hy vọng điều này sẽ hữu ích.

70

Đối với những người trong tương lai mà tìm thấy điều này, phương pháp đúng là:

assert_template :new 
4

Tính đến Rails 5.0.0, bạn có thể kiểm tra rằng hành động được trả lại đúng bằng cách kiểm tra các mẫu hiển thị.

Trước tiên, bạn cần thêm đá quý rails-controller-testing vào Gemfile của bạn (vì nó được trích xuất bên ngoài Rails từ phiên bản 5). Sau đó, trong thử nghiệm của bạn, chỉ cần sử dụng:

assert_template :new

Các vấn đề liên quan