2011-09-12 6 views
7

Trong thử nghiệm tích hợp Rails, làm cách nào để đặt biến phiên (: user_id trong trường hợp của tôi)? Rõ ràng đây không phải là một thử nghiệm tích hợp đầy đủ, nhưng cho rằng trong xác thực người dùng ứng dụng của tôi không thể xảy ra mà không có sự tương tác của người dùng, tôi có thể làm việc xung quanh và có một biến phiên được đặt theo cách thủ công không? Không.Cách đặt biến phiên trong kiểm tra tích hợp Rails

Đã thử các cách sau: "phiên" không khả dụng trong phạm vi đó, open_session trả về phiên mà tôi không tìm cách cập nhật.

Trả lời

1

Tại sao xác thực không xảy ra mà không có sự tương tác thủ công? Nó có sử dụng CAPTCHA không? Nếu đúng như vậy, hãy thử một phần để chạy trong môi trường thử nghiệm.

+0

Chống lại twitter hoặc facebook. – jbasko

+0

Điều này có hữu ích không? http://stackoverflow.com/questions/5331045/testing-a-web-applications-facebook-integration-with-cucumber –

5

Theo như tôi có thể nói, bạn không thể. Giá trị phiên trong các phép thử tích hợp (trong đường dẫn 3.2.2) là một bản sao. (Rails gods: Vui lòng sửa tôi nếu tôi là sai.) Bạn có thể đặt giá trị, nhưng nó sẽ không ảnh hưởng đến lần nhận/đăng tiếp theo vì đó là bản sao cục bộ của phiên thực. Tuyệt vời cho các bài kiểm tra khẳng định, không tuyệt vời như vậy để giữ trạng thái trong phiên trong khi kiểm tra tích hợp.

Tôi có bộ điều khiển thử nghiệm để hỗ trợ kiểm tra JavaScript của mình qua Evergreen.

Giải pháp của tôi là thêm phương thức vào bộ điều khiển thử nghiệm và tuyến đường có sẵn khi tôi KHÔNG được sản xuất, cho phép tôi đặt giá trị phiên. Về cơ bản, phương thức app_test # set_session của chúng tôi sàng lọc các tên tham số cho tiền tố, nếu tìm thấy tiền tố, thì giá trị của phiên cho tên thông số tiền tố được đặt. Một cái gì đó như:

params.each() do |key, value| 
      next if (key !~ /^set_session_/) 
      session[ key.slice(("set_session_".size())..-1).to_sym ] = value 
    end 
    # don't forget to render something/anything 

Vì vậy, để thiết lập các biến session trong những thử nghiệm hội nhập của tôi, tôi có một nhỏ đoạn mã như:

prefix = "set_session_" 
    post("/set_session.html", { (prefix + "user_id") => "My Name Is Mudd" }) 

Không xinh đẹp như "phiên [: user_id] = ' Tên tôi là Mudd '', nhưng nó hoạt động. Bài đăng tiếp theo của tôi/get sẽ thấy phiên [: user_id] được đặt với giá trị mong muốn.

Điều này dễ dàng mở rộng để truyền số nguyên, ký hiệu, v.v. và tất nhiên, nhiều cặp khóa/giá trị phiên có thể được đặt cùng một lúc. Không đẹp, nhưng không tệ.