2009-03-15 23 views
11

Tôi đang viết một spec cho bộ điều khiển Rails của tôi, đây là hành động tôi là thử nghiệm:RSpec nên redirect_to vấn đề

def create 
    @course = Course.new(params[:course]) 
    if @course.save then 
    #flash[:notice] = 'Course Created' 
    redirect_to courses_path 
    else 
    render :action => 'new', :status => 400 
    end 
end 

Và đây là spec mà xác nhận điều đó:

describe "POST /courses [Good Input]" do 

    it "should redirect to Courses index page after creation" do 
    @course.stub!(:save).and_return(true) 
    post :create 
    response.should be_success 
    response.should redirect_to(courses_path) 
    end 

end 

Tôi vẫn nhận được lỗi này từ RSpec:

'CoursesController POST/courses [Good Input]

nên chuyển hướng đến khóa học trang chỉ mục sau khi tạo'

FAILED

dự kiến ​​chuyển hướng sang "/ khóa học", có không chuyển hướng

Bất cứ ý tưởng tại sao điều này xảy ra?

SOLVED

như rishavrastogi nói, nên be_success hy vọng một mã http trên phạm vi 2xx, và một chuyển hướng rơi vào phạm vi 3xx (trên thực tế 302 của nó)

Nhu cầu khẳng định được thay đổi thành =>phản hồi.hãy be_redirect.

Mặc dù trong trường hợp này, không cần kiểm tra xem phản hồi có phải là chuyển hướng không và sau đó kiểm tra chuyển hướng đến một trang cụ thể, do đó không cần xác nhận nữa.

Trả lời

5

Tôi không phải là RSpec-er, nhưng tôi đoán "response.should be_success" không nên ở đó vì phản hồi thực sự là "chuyển hướng HTTP" chứ không phải "thành công HTTP" ... vì vậy hãy thử xóa câu trả lời. nên be_success

Cũng thay đổi

 post :create

để

 post :create, :course => {}
+0

tại sao tôi nên thay đổi bài đăng: tạo? –

+0

thực sự có thể không cần thiết cho đến khi bạn muốn chuyển một số giá trị của các biến mẫu chẳng hạn như "post: create,: course => {: title =>" something "} .." v.v .. điều này có thể được yêu cầu khi làm việc với xác thực –

+0

Ok. Cảm ơn. Tôi đang chế giễu mọi thứ (như Course.new và Course.find) ... vì vậy tôi thực sự không cần điều đó, nhưng đó là một điểm tốt anyway –

0

Tôi không phải là người điều khiển, nhưng bạn phải làm điều gì đó như assigns(:course).stub!.... Các biến cá thể trong thông số kỹ thuật không giống như các biến mẫu trong bộ điều khiển, assigns để cho phép bạn truy cập vào các biến điều khiển.

+0

Xin lỗi tôi phải nói rằng trong khi khối tôi làm Course.stub! (: mới) .and_return (@course) là một đối tượng giả tôi tạo ... –