8

Tôi bắt đầu viết các bài kiểm tra chức năng cho ứng dụng đường ray của mình ngay hôm nay. Tôi sử dụng plugin xác thực RESTful. Tôi gặp một vài điều khó hiểu mà tôi hy vọng ai đó có thể làm rõ cho tôi.Thử nghiệm chức năng Ruby on Rails với plugin Xác thực RESTful

1) Tôi đã viết chức năng đăng nhập nhanh vì hầu hết các chức năng trong ứng dụng đường ray của tôi đều yêu cầu xác thực.

def login_as(user) 
    @request.session[:user_id] = user ? user.id : nil 
end 

Vấn đề tôi thấy với chức năng này, về cơ bản là giả mạo xác thực. Tôi có nên lo lắng về điều này? Có lẽ nó là okay để đi tuyến đường này miễn là tôi kiểm tra phương pháp xác thực thực sự ở đâu đó. Hoặc có lẽ đây là thực hành khủng khiếp.

2) Điều khó hiểu thứ hai là ở một số nơi trong các bài kiểm tra chức năng của tôi, tôi cần quá trình xác thực đầy đủ để xảy ra. Khi người dùng được kích hoạt, tôi có phương thức do_activate tạo một số đối tượng ban đầu cho người dùng. Nó tương tự như việc tạo ra một đối tượng sổ tay trống và đối tượng bút cho một ứng dụng sinh viên, nếu điều đó có ý nghĩa.

Vì vậy, để kiểm tra ứng dụng của tôi đúng cách, tôi cần người dùng nhấn trạng thái kích hoạt đó để các đối tượng đó được tạo. Tôi hiện đang sử dụng Factory Girl để tạo người dùng và sau đó gọi hàm login_as ở trên để xác thực giả mạo.

Tôi đoán một tùy chọn khác là bỏ qua chuỗi xác thực đầy đủ và chỉ cần tạo các đối tượng trống với Factory Girl. Tôi có thể kiểm tra xác thực thích hợp ở một nơi khác.

Bạn nghĩ sao? Nếu tôi nên đi qua các trình tự thích hợp, tại sao không phải là mã dưới đây gọi hàm do_activate?

user = Factory.create(:user) 
user.active = 1 
user.save 

Cảm ơn bạn!

+0

[Đây là câu hỏi tương tự mà tôi đã hỏi] (http://stackoverflow.com/questions/64827/rails-restful-authentication-rspec-how-to-test-new-models-that-require-authen) và một loạt các liên kết tôi đã kéo lại với nhau. – srboisvert

Trả lời

7

Giả mạo nó hoàn toàn có thể chấp nhận được.

Tuy nhiên, hãy viết các kiểm tra khác để đảm bảo rằng những thứ bạn muốn được bảo vệ được bảo vệ. Vì vậy,

test "it should show the profile page" do 
    user = Factory(:user) 
    login_as(user) 
    get :show, :id => user 
    assert_response :success 
end 

test "it should not show the profile page cos I'm not logged in" do 
    user = Factory(:user) 
    get :show, :id => user 
    assert_response :redirect 
end 

Hãy liên hệ với tôi để theo dõi!